НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.6 >> [I128-2784] Задержки открытия страниц при записи статистики посещений📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.2.6 | 🔘 Завершено |
Высший | Ilya Mikhaylenko |
Компоненты: ИРБИС 128. Модуль Pages - Страницы сайта
Завершено: 17.09.2026 16:11
Проблема:
При одновременном открытии страниц запись статистики посещений могла задерживать ответ сервера. Веб-запрос ожидал освобождения общей блокировки базы статистики до 10 секунд; при накоплении истории и нагрузке страницы открывались медленно, а часть посещений могла не сохраниться после истечения ожидания.
Решение:
Посещения сначала записываются в файловый журнал и затем переносятся в базу фоновой задачей. Показ страницы больше не ожидает записи в базу статистики. Накопленная история сохраняется; новые посещения появляются в базе после фоновой обработки.
Технические подробности:
Обе ветки Pages::Show() используют последовательный журнал. Pages/QueueMonitor планирует Pages/ImportStatistics, который переносит ограниченные пакеты в прежнюю SID-БД PagesStat. Позиция импорта сохраняется вместе с данными в одной транзакции, что предотвращает дубли при повторном запуске. Обработанные сегменты удаляются, повреждённые строки сохраняются для диагностики. Эксплуатация описана в Help: ?id=Help/Show&m=Pages/Statistics.
Открытие страниц могло ожидать общую блокировку записи статистики до 10 секунд. I128-2784 переносит сохранение посещений в файловый журнал с периодическим пакетным импортом в существующую SID-БД PagesStat; накопленная история и поля посещения сохраняются. Целевая линия — release/2026.2, версия 2026.2.6; Jira: https://jira.irbis128.ru/browse/I128-2784.
Куда смотреть:
Pages::Show() при открытии обычной страницы, например ?id=News, и страницы модуля. Было: перед выводом содержимого запрос открывал SQLite и ожидал Record_SetSidDbData_PagesStat. Стало: запрос добавляет строку в журнал, а Pages/ImportStatistics сохраняет её в БД в фоне. Chrome: подтверждены страница «Новости» и Help ?id=Help/Show&m=Pages/Statistics; HTTP-запрос при удержанной прежней блокировке вернул страницу за 0,15 секунды.DataPath. Монитор Pages/QueueMonitor подключается автоматически; на стенде подтверждена успешная обработка Pages/ImportStatistics и появление посещения в прежней БД. Дополнительных пользовательских настроек нет; при остановке очереди журнал накапливается. При обновлении существующей установки может потребоваться штатная очистка кэша списка мониторов.?id=Help/Show&m=Pages/Statistics описывает задержку обновления статистики, результат задачи, повтор после сбоя, повреждённые записи и оставшиеся .tmp. Нового UI или экранов настройки нет, отдельные скриншоты настройки не требуются.Изменения по файлам:
modules/Pages/__call/Show.inc
SetSidDbData. Обычная и модульная страницы вызывают AppendStatistics в прежних точках учёта посещений; отказ в VIEW и неизвестная страница не учитываются.modules/Pages/api.php
modules/Pages/PagesStatJournal.php
pages_stat_rejected.modules/Pages/__call/ImportStatistics.inc
modules/Pages/Actions/QueueMonitor.inc
Pages/ImportStatistics с single/restartonerror и паузой после завершения.modules/Pages/Actions/ImportStatistics.inc
PagesStat.log.modules/Pages/Help/Purpose.md
modules/Pages/Help/Root.md
modules/Pages/Help/Statistics.md
modules/Help/Help/GeneralDescription/WhatsNew/I128/2026.2.6.md
modules/Help/Help/GeneralDescription/WhatsNew/I128/TaskInfo/I128-2784/README.md
tools/PagesStatJournalSelfTest.php
Разрешение текущих конфликтов подготовлено в PR #1359 (merge/release-2026.2-to-develop-pr1358 -> develop, commit 169484ec3bf1bde29110dd8cd22cf7f5b3fae057). Обе исходные ветки защищены от прямого push; отдельный PR сохраняет направление переноса release → develop. После принятия #1359 следует повторно проверить этот PR на новые изменения релизной ветки.
Перенос всех изменений из release/2026.2, которые ещё не входят в develop.
PR создан после merge #1353: I128-2785: SocketProxy отправляет внутренние HTTPS-запросы на порт 80.
Пока этот PR открыт, последующие изменения release/2026.2 входят в него автоматически. Перед merge требуется проверить полный diff и пройти обычное review.
Перенос накопленных исправлений release/2026.2 в develop с разрешением конфликтов PR #1358.
Обе исходные ветки защищены от прямого push. Отдельная ветка содержит merge текущего release/2026.2 (e402d81e4d2a59c87254ea3bd62fbd805d6bd332) в текущий develop (df8b1a8ee2d35e0cc0c5e776d64cb71f115013e4). Новые функции develop не переносятся обратно в релизную линию. Для принятия изменений используется обычное review; PR #1358 пока остается открытым.
Разрешение конфликтов:
^, в том числе после редактирования повторений через F3. Отложенная синхронизация отменяется перед сохранением.modules/he3/tests/editor_commands_smoke.js. Существующий тест журнала статистики сохраняет путь tools/PagesStatJournalSelfTest.php.Проверки:
await Irbis.he3.testEditorCommands(). Серверное сохранение подменено; пользовательские БД не изменялись.При принятии сохранить merge-коммит и родителя release/2026.2 в истории develop (merge commit или fast-forward).
После принятия этого PR нужно повторно проверить #1358: если в release не появились новые изменения, его перенос будет полностью выполнен. Автоматизация последующих переносов release → develop не изменялась.