From 74f3ec4d6ee990e0b1909a5c94638232019be98c Mon Sep 17 00:00:00 2001 From: 4aiman Date: Tue, 29 Sep 2026 12:37:15 +0300 Subject: [PATCH] Startup: batch the seq repair (per-point loop made cold start ~15s, every boot) The startup seq repair (runMigrations) assigned seq to NULL-seq sessions one UPDATE per point. Merge/split leave seq=NULL by design, so recent merged tracks (10865 + 3614 points) meant ~15000 sequential IPC writes on every launch - and for the big sessions the writes did not persist before the next launch re-ran the whole thing. That was the slow start. Replace it with the batched CASE re-sequence (chunks of 300, like saveGapFill/saveSmoothedTrack): ~50 UPDATEs instead of ~15000. Verified on device: repair of all 3 sessions dropped from ~15s to ~1.1s, seq now persists so it is one-time (boot 2 does no repair, migrations 357ms), 0 NULL seq left, seq matches ts order (0 inversions). --- PROJECT_MAP.md | 2 +- .../2026-09-29_startup-slowness.md | 49 +++++++++++++++++++ frontend/js/db.js | 23 +++++++-- 3 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 docs/session-logs/2026-09-29_startup-slowness.md diff --git a/PROJECT_MAP.md b/PROJECT_MAP.md index f300e52..8b3b15d 100644 --- a/PROJECT_MAP.md +++ b/PROJECT_MAP.md @@ -22,7 +22,7 @@ | Файл | Строк | Назначение | |------|-------|------------| | `js/main.js` | ~5900 | Экраны, навигация, модалки, графики, нутриенты, HR UI, компас (EMA + gimbal lock), ландшафт (3 режима), дороги. `appConfirm`/`appPrompt` (in-app диалоги вместо нативных, в стеке окон). Страница «Сохранённые маршруты», оверлей маршрута на записи и просмотре (`whenMapReady` — await готовности карты, не таймаут). Панель де-джиттера на детали трека (ползунки окно/итерации, живое превью, сохранить/откат, `reopenDetail` — переоткрытие детали без наложения оверлеев). `showRouteDetail` — предпросмотр маршрута (карта+профиль высоты+тап-высоты+фуллскрин), `showRouteEditor` — создание/правка маршрута (тап карты=точка в конец, тап линии=вставка в сегмент, тащить=двигать, тап точки=удалить; `makeMarker` возвращает маркер для push/splice). `appConfirm`/`appPrompt`/`appAlert` — in-app диалоги (нативных `alert/prompt/confirm` не осталось; `