Andrey Epifancev 5f4afc0926 perf: правки по финальному ревью — скрипты, данные, фильтр long tasks
- run-all.sh: копия run-all.status.json в report-data с относительными путями;
  пример control4x с отдельным тегом и предупреждением (I-3, M-8); очищены
  три закоммиченные копии статуса
- lib/modal.ts: long tasks по пересечению окна (tasksInWindow), тест (M-7)
- scale_compare.py: строки листов на момент скролла (до grow), пояснения (M-6)
- hotspots_summary.py: оговорка о разбавлении «на шаг» (M-5)
- netlog_sizes.py + report-data/20261026-s1/analysis/netlog-sizes.md (M-3)

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:34:58 +04:00

8.8 KiB
Raw Permalink Blame History

Горячие точки: сводка 20261026-hot (hotspots.spec.ts, hotspots_summary.py)

Рендеры React на шаг колеса 200 px (профилирующая сборка :8081)

Шаги: hotspots.spec.ts всегда делает 40 шагов вперёд и 40 назад без проверки конца прокрутки. На коротких страницах (свод 1 MAIN — 17 шагов до конца, AHR_RENT — 31 строка) часть шагов ничего не прокручивает, и «на шаг» разбавлено: с main_thread_ms_per_step основного прогона (scroll.spec) не сравнивать; использовать доли, рендеры на коммит и состав топа.

target роль шагов коммитов/шаг рендеров компонентов/шаг из них Styled(td)/шаг self React, мс main thread/шаг, мс
FORM_2/AHR/null:y rf 80 3.31 14808 1696 3708 76.5
FORM_2/AHR/null:x rf 80 3.49 17090 2007 4222 81.3
FORM_4/STRUCTURE/null:y rf 80 3.75 17932 2021 4439 92.4
project/LIMIT/1/2026:y rf 80 3.73 15921 1961 3937 79.5
svod/svod1_MAIN:y dfip 80 1.27 9657 1731 3768 63.3
svod/projects_summaries:y dfip 80 2.7 16018 2756 5268 94.7
svod/svod2_GO:y dfip 80 2.01 39768 7810 10317 179.0
  • FORM_2/AHR/null:y: ForwardRef(Styled(td)) 135665/1785.1 мс; MRT_TableBodyCell 129295/288.5 мс; ForwardRef(Styled(Component)) 52005/208.2 мс; ForwardRef(TableCell) 135665/172.2 мс; MRT_TableBodyCellValue 122490/163.3 мс; ForwardRef(Tooltip) 17400/126.2 мс
  • FORM_2/AHR/null❌ ForwardRef(Styled(td)) 160576/2068.7 мс; MRT_TableBodyCell 153432/281.2 мс; ForwardRef(Styled(Component)) 59916/248.8 мс; ForwardRef(TableCell) 160576/216.5 мс; MRT_TableBodyCellValue 148392/189.5 мс; ForwardRef(Tooltip) 20014/152.8 мс
  • FORM_4/STRUCTURE/null:y: ForwardRef(Styled(td)) 161650/2158.0 мс; MRT_TableBodyCell 153400/354.1 мс; ForwardRef(Styled(Component)) 63000/239.4 мс; ForwardRef(TableCell) 161650/223.7 мс; MRT_TableBodyCellValue 145730/176.4 мс; ForwardRef(Tooltip) 21065/158.9 мс
  • project/LIMIT/1/2026:y: ForwardRef(Styled(td)) 156842/2050.5 мс; MRT_TableBodyCell 149980/248.8 мс; ForwardRef(Styled(Component)) 53547/217.8 мс; ForwardRef(TableCell) 156842/213.0 мс; MRT_TableBodyCellValue 142481/174.5 мс; ForwardRef(Tooltip) 17914/131.8 мс
  • svod/svod1_MAIN:y: ForwardRef(Styled(td)) 138474/1902.3 мс; MRT_TableBodyCellValue 135177/1152.5 мс; MRT_TableBodyCell 138474/241.7 мс; ForwardRef(TableCell) 138474/174.9 мс; ForwardRef(Styled(tr)) 3297/46.3 мс; ForwardRef(Styled(Component)) 10099/46.0 мс
  • svod/projects_summaries:y: ForwardRef(Styled(td)) 220500/2973.7 мс; MRT_TableBodyCellValue 213150/1104.3 мс; MRT_TableBodyCell 220500/351.0 мс; ForwardRef(TableCell) 220500/272.0 мс; ForwardRef(Styled(tr)) 7350/92.9 мс; ForwardRef(Styled(Component)) 22566/92.7 мс
  • svod/svod2_GO:y: ForwardRef(Styled(td)) 624800/7648.1 мс; MRT_TableBodyCell 624800/1152.4 мс; ForwardRef(TableCell) 624800/745.0 мс; MRT_TableBodyCellValue 624800/307.0 мс; MRT_TableBodyRow 5680/147.6 мс; Insertion 642002/126.4 мс

CPU-профили (prod-сборка с source maps :8082; разбор - cpuprofile-top.md)

Шаги: hotspots.spec.ts всегда делает 40 шагов вперёд и 40 назад без проверки конца прокрутки. На коротких страницах (свод 1 MAIN — 17 шагов до конца, AHR_RENT — 31 строка) часть шагов ничего не прокручивает, и «на шаг» разбавлено: с main_thread_ms_per_step основного прогона (scroll.spec) не сравнивать; использовать доли, рендеры на коммит и состав топа.

target роль шагов main thread/шаг под профайлером, мс профиль
FORM_2/AHR_RENT/null:y rf 80 7.7 artifacts/hot-FORM_2_AHR_RENT_null-y.cpuprofile
FORM_2/AHR/null:y rf 80 80.5 artifacts/hot-FORM_2_AHR_null-y.cpuprofile
FORM_2/AHR/null:x rf 80 80.9 artifacts/hot-FORM_2_AHR_null-x.cpuprofile
FORM_4/STRUCTURE/null:y rf 80 91.1 artifacts/hot-FORM_4_STRUCTURE_null-y.cpuprofile
project/LIMIT/1/2026:y rf 80 77.3 artifacts/hot-project_LIMIT_1_2026-y.cpuprofile
svod/svod1_MAIN:y dfip 80 60.4 artifacts/hot-svod_svod1_MAIN-y.cpuprofile
svod/projects_summaries:y dfip 80 90.7 artifacts/hot-svod_projects_summaries-y.cpuprofile
svod/svod2_GO:y dfip 80 160.7 artifacts/hot-svod_svod2_GO-y.cpuprofile

Фильтр свода: мутации DOM контейнера .MuiTableContainer-root за окно наблюдения после ввода «1»

режим target main thread за окно, мс кадров кадров с мутацией первая мутация (кадр) long tasks виды мутаций рендеры React
react svod/svod2_GO:filter 804 1796 0 -1 1 (137 мс) нет 6 коммитов / 18021
cpu svod/svod2_GO:filter 661 1798 0 -1 1 (103 мс) нет коммитов /
cpu svod/svod2_RF:filter 743 1796 1 20 1 (139 мс) attributes:tbody.MuiTableBody-root@class ×1 коммитов /
cpu svod/svod1_MAIN:filter 601 1800 1 20 1 (71 мс) attributes:tbody.MuiTableBody-root@class ×1 коммитов /

Рост CSS-правил и matchMedia по циклам: FORM_2/AHR/null:cssgrowth (цикл AHR -> скролл 40 шагов -> /tasks)

цикл main thread/шаг, мс CSS-правил @media style вызовов matchMedia нетто listeners matchMedia
0 2874 73 5
1 78.1 3232 96 5
2 77.8 3238 96 5
3 77.7 3240 96 5
4 78.4 3240 96 5
5 77.7 3242 96 5
6 76.7 3243 96 5
7 78.4 3243 96 5
8 79.7 3244 96 5
9 78 3245 96 5
10 77.1 3245 96 5
11 78.7 3245 96 5
12 79.7 3245 96 5
13 78.5 3246 96 5
14 76.7 3249 96 5
15 78.1 3249 96 5

Рост CSS-правил и matchMedia по циклам: FORM_2/AHR/null:cssgrowth (цикл AHR -> скролл -> /tasks -> второй лист -> скролл -> /tasks, со счётчиком matchMedia)

цикл main thread/шаг, мс CSS-правил @media style вызовов matchMedia нетто listeners matchMedia
0 2874 73 5 0 0
1 75.4 3454 102 5 2 0
2 75.9 3471 102 5 4 0
3 78.3 3476 102 5 6 0
4 79 3482 102 5 8 0
5 77 3490 102 5 10 0
6 77.5 3497 102 5 12 0
7 77.5 3500 102 5 14 0
8 78.2 3501 102 5 16 0
9 79.3 3504 102 5 18 0
10 77.1 3505 102 5 20 0

Топ мест вызова matchMedia (последний цикл, нарастающим итогом):

  • 20 × (max-width:720px) @ at static/js/408_script.6797a7e7.js:162:21515 < at Object.useMemo (static/js/lib-react_script.73464df3.js:2:64779) < at n.useMemo (static/js/lib-react_script.73464df3.js:2:135509)

Модалки (повтор на восстановленных данных)

модалка роль клик → кадр, мс main thread, мс
dict_vsp_add admin 165.3 169.4
dict_vsp_add admin 167.4 171.7
dict_vsp_add admin 185 189.5
dict_vsp_edit admin 183.5 190.0
dict_vsp_edit admin 188.4 199.3
dict_vsp_edit admin 193.5 204.0
dict_vsp_export admin 150.8 154.2
dict_vsp_export admin 149.2 153.6
dict_vsp_export admin 147.2 151.6
модалка коммитов рендеров self, мс топ
dict_vsp_add 10 26971 92.9 ForwardRef(Styled(td)) 2896/37.0; ForwardRef(Styled(span)) 2851/9.1; ForwardRef(TableCell) 2896/4.4; MRT_TableBodyCell 2880/4.4
dict_vsp_edit 12 27287 93.3 ForwardRef(Styled(td)) 2896/37.2; ForwardRef(Styled(span)) 2877/9.6; MRT_TableBodyCell 2880/7.1; ForwardRef(TableCell) 2896/3.3
dict_vsp_export 9 25722 82.2 ForwardRef(Styled(td)) 2896/43.1; ForwardRef(Styled(span)) 2728/9.2; MRT_TableBodyCell 2880/5.0; ForwardRef(TableCell) 2896/3.6