# Рабочие заметки 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).