- perf/analysis: разбор trace (timeline_breakdown), CPU-профилей с source maps (cpuprofile_top), heap snapshots (heapdiff), циклов памяти, сравнения масштабов, ручной EXPLAIN вложенных запросов (explain_manual), API против X-DB-Time-Ms (api_split), сводка горячих точек; тесты ядра в perf/tests/test_analysis.py - perf/e2e/scenarios/hotspots.spec.ts: CPU-профиль, рендеры React, мутации DOM после фильтра, рост CSS-правил по циклам (вне run-all) - prod-сборка с source maps: PERF_SOURCEMAP=1, perf/stand.sh web-sourcemap (:8082) - perf/report-data/20261026-s1, 20261026-s2 (summary, sql, analysis, explain-manual), t5-types (иллюстрация CPU 6x) - design.md: решения T10b без обсуждения Refs #202 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
Рабочие заметки T10b (промежуточные, для восстановления контекста)
Данные: s1 = perf/results/20261026-s1 (агрегаты report-data/20261026-s1), s2 = 20261026-s2 (1 повтор, R-4). Профили горячих точек: perf/results/20261026-hot (hotspots.spec.ts) на восстановленных данных масштаба 1 (R-6, шаг 0 выполнен 2026-10-26 12:05: reset + gen s1 + verify OK + grow s1 + smoke OK; манифест структурно совпадает с копией прогона).
Скролл (A.5)
- main_thread_ms_per_step ≈ 75–95 мс на листах/отчётах независимо от числа строк (AHR_RENT 31 строка 77, AHR 1154 строки 89); s2 листы те же (AHR 85): виртуализация работает, цена шага постоянна и высока.
- trace (timeline-breakdown.md): scripting 60–70 мс/шаг, rendering (style) 10–21, gc 4–5; своды 2 — 150–185 мс/шаг, s2 — 251–256 (растёт со строками).
- CPU-профиль (cpuprofile-top.md, hot-FORM_2_AHR_null-y): emotion serialize/styled/hash + mui styleFunctionSx ≈ 30 %,
offsetHeightиз measureElement RealtimeTable.jsx:42 — 14 % (принудительный layout; высота строки фиксирована 80 px). - React (hotspot_react.jsonl): FORM_2/AHR — 3,3 коммита и ~14,8 тыс. рендеров компонентов на шаг колеса; Styled(td) 1,7 тыс. рендеров на шаг (~500 видимых ячеек × 3,3 коммита), 48 % self time. memoMode в MRT не задан (constants/tableConfig.js:3-36).
- Своды 1 / сводные проектов: SummaryTable.jsx:69 Cell (new Intl.NumberFormat на каждый рендер ячейки, :75) 14–23 %, measureElement SummaryTable.jsx:13 8–12 %.
Фильтр свода 2 GO (A.2) — см. hot-svod2 (в работе)
SQL (A.3, A.4, B)
- upd_form_cell (coauthor sql_top): 304 вызова × 630 мс; внутри upd_form_cells дважды v_form_view всего листа (до: 0033_form2_old_sort.sql:1460-1466, после: :1527-1534) — 316 + 311 мс. Пропускная способность одного WS соединения ≈ 1/0,63 с ≈ 1,6 правки/с; факт: (62 эха + 10 ошибок)/45,8 с ≈ 1,57/с при rate 5 (scroll_coauthor.jsonl). WS-цикл последовательный: websocket.py:973-1130.
- FORM_4/CAP (300 строк): v_form_view 1,55 с (explain-manual, bench.json); три уровня GROUP BY с агрегатом v3.jsonb_sum (0012_del_project.sql:1418-1481; рекурсивная SQL-функция 0010_form4.sql:269-297) по ~500 мс каждый.
- FORM_2/AHR: v_form_view ≈ 530–620 мс; вложенный WITH tw ≈ 471 мс, из них JIT ≈ 138 мс/вызов (pgss_form_view_ahr.json: 2335 функций за 8 вызовов, 1106 мс); тело без JIT 240 мс (EXPLAIN jit_off). Temp ~3270 блоков (25 МБ) на вызов — tuplestore RETURN QUERY; 64MB work_mem убирает temp, время в установившемся режиме не меняет.
- s1→s2: GET FORM_2/AHR 861 мс (1154 строки) → 4789 мс (1744 строки): ×5,6 при ×1,5 строк — сверхлинейно.
- py-spy: требует root на macOS («This program requires root on OSX») — не запускался (sudo запрещён). Критерий 2× не выполнен ни для одного тяжёлого эндпоинта (svod2 ×1,5, CAP ×1,1–1,4, AHR ×1,4) — профиль Python и не требовался.
Память (B)
- heapdiff.md (циклы 10→20): рост self size 23,1 → 27,2 МБ, главный — нативные Blink MediaQuery/MediaQuerySet/ MediaQueryFeatureExpNode (+23 161 шт. каждого), удерживаются StyleEngine документа → CSS-правила с @media копятся (emotion вставляет правила и не удаляет). JS-объекты: рост мал (Object +1121, closures). Проверка — cssgrowth (в работе).
R-5
FORM_4/STRUCTURE: v_form4_view для STRUCTURE берёт только строки row_type != 'INPUT' (0033_form2_old_sort.sql:387-395), фронт делает редактируемыми только INPUT (tableColumns.jsx:132) — правок ячеек на этом листе нет в приложении, бот прав.
Дополнения (по ходу)
- После grow лист FORM_2/AHR = 2 092 строки (1154 до): строки сателлитов UTILITY/SECURITY попадают в AHR. Bench, модалки, память, hotspots, explain-manual и контроль 4× — на 2 092 строках; скролл и соавтор основного прогона — на 1154.
- Фильтр свода 2 GO (A.2): 0 мутаций DOM за 30 с после ввода — артефакт критерия (hotspots.md).
- Справочник ВСП: таблица без виртуализации (TableDictVsp.jsx:238-247), модалки 150–195 → 500–610 мс на s2.
- Svod2Page: нет колоночной виртуализации; 7,8 тыс. Styled(td) на шаг.
- Контроль 4× — отдельный run_id 20261026-control-s1 (решение в design.md).