Профилирование фронта и бэка: стенд, замеры, отчёт (#202) #203
Open
aep
wants to merge 28 commits from
feat/202-perf-profiling into test
pull from: feat/202-perf-profiling
merge into: RSHB:test
RSHB:main
RSHB:test
RSHB:svod2-filter-fix2
RSHB:indent-export
RSHB:export-hierarchy
RSHB:svod2-filter-fix
RSHB:fix-id-column
RSHB:export-year-fix
RSHB:form3-source
RSHB:columns-svod-2
RSHB:export-optimize-refresh
RSHB:last-column
RSHB:svod-fix
RSHB:fix-columns
RSHB:form3-expense
RSHB:sattelite-fix
RSHB:delete-sattelite-rows
RSHB:form3-pages
RSHB:form1-sub_sub-fix
RSHB:sort-fix
RSHB:fixes-form
RSHB:new-expenses
RSHB:new-rows
RSHB:fix-style
RSHB:phase-template-edit
RSHB:fixes
RSHB:add-btn-reset-filter
RSHB:vsp-choice-fix
RSHB:project-filters-fix
RSHB:width-column-header-name
RSHB:task-filter-navigation
RSHB:auth
RSHB:icons-program-project
RSHB:export-optimize
RSHB:org-unit-limits
RSHB:auth-v2
RSHB:tasks-filters
RSHB:insert-row-fix
RSHB:svod-roles
RSHB:new-role-fix
RSHB:phase-edit-fix
RSHB:new-role
RSHB:delete-from-cell
RSHB:svod-cahe-and-table-direction
RSHB:direction-stage-fix
RSHB:backslash-fix
RSHB:svod
RSHB:front-svod-form-1
RSHB:projects-filters
RSHB:remove-row-fix
RSHB:computed-fix
RSHB:modal-add-year-project
RSHB:name-fix
RSHB:audit-logs-projects
RSHB:meta-form-3
RSHB:project-back-fix
RSHB:fix-sticky-columns
RSHB:fixies-3-form
RSHB:tech-num-fix
RSHB:fix-logic-limitation
RSHB:projects-fix
RSHB:3-form-project
RSHB:project-add-year-handler
RSHB:projects-summary-handler
RSHB:AURORA-1247
RSHB:projects-handlers
RSHB:vsp-choose-form2-2
RSHB:directions-fix
RSHB:add-validation
RSHB:add-checkbox-export-vsp
RSHB:fix-update-column-config
RSHB:fix-editable-columns
RSHB:add-biome-front
RSHB:vsp-choose-form2
RSHB:export-form-4
RSHB:booking-fix
RSHB:fix-front-tables
RSHB:phase-directions
RSHB:AURORA-1225
RSHB:fix-mapping-form-2-oper
RSHB:AURORA-1076-fix
RSHB:fix-add-row-program-4-form
RSHB:form2-limit-migrations
RSHB:delete-projects
RSHB:AURORA-1076
RSHB:form-4-add-row
RSHB:fix-logs
RSHB:AURORA-1206
RSHB:AURORA-894
RSHB:add-line-log-hotfix
RSHB:form-export-fix
RSHB:form-4-sql
RSHB:table-optimization-fix
RSHB:header_forms
RSHB:form-4-expense-item-filters
RSHB:entity-type-hotfix
RSHB:form-3-phases-timezones
RSHB:form-4-handlers
RSHB:export-fix
RSHB:close-date-vsp-fix
RSHB:deleted-user-auth-fix
RSHB:smeta-fix
RSHB:front-fixes
RSHB:line_id_code_full
RSHB:line_id_code
RSHB:timezones
RSHB:filenames-fix
RSHB:AURORA-1174-73
RSHB:project-sheets
RSHB:AURORA-1166
RSHB:websocket-projects
RSHB:project-front
RSHB:form3-permissions
RSHB:location_from_to_placement_type
RSHB:fix-vsp-filters
RSHB:fix-tests-and-functions
RSHB:mig2-fix
RSHB:vsp_fixes
RSHB:fix-ssp-title
RSHB:AURORA-1148
RSHB:fix-vsp-form-edit
RSHB:sql-funcs2-fix
RSHB:AURORA-1132
RSHB:logs
RSHB:AURORA-1147
RSHB:export-optimization
RSHB:AURORA-1131
RSHB:sql-funcs-fix
RSHB:vsp-dropdown-form
RSHB:form_2-back
RSHB:migrations
RSHB:websocket-self-flag
RSHB:reload-fix
RSHB:test-stand-fix
RSHB:excel-empty-fix
RSHB:requirements-fix
RSHB:AURORA-1096-back
RSHB:AURORA-1098
RSHB:AURORA-1096
RSHB:ws-user-id-fix
RSHB:expense-item-handler
RSHB:fix-date-phase
RSHB:excel-fix
RSHB:vsp-edit-field-fix
RSHB:vsp-fix-back
RSHB:vsp-back
RSHB:create-form-back
RSHB:export-direction-fix
RSHB:change-role-fix
RSHB:org-unit-users-fix
RSHB:audit-fix
RSHB:org-archive
RSHB:del_row_fix
RSHB:websocket_locks
RSHB:new_line_id
RSHB:admin-back
RSHB:form-fix
RSHB:ws
RSHB:ssp-fix
RSHB:stages-back
RSHB:form_124_write
RSHB:form_124
RSHB:new-model
RSHB:test-tsygankov
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "feat/202-perf-profiling"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs #202
Профилирование фронта и бэка по жалобам заказчика: медленный скролл форм и медленное открытие модальных окон. Код приложения не менялся:
git diff origin/test --stat -- api/src web/src api/alembic web/rsbuild.config.ts web/package.json api/requirements*.txt api/webпуст. Всё новое лежит вperf/, отчёт —perf/REPORT.md.Что в PR
perf/— воспроизводимый стенд: Postgres 16 в docker, API, prod- и profiling-сборки фронта черезrsbuild previewс прокси. Генератор данных через HTTP API (масштаб 1 и удвоенный масштаб 2), сценарии Playwright + CDP (скролл, скролл при соавторе, модалки, память), замеры бэка (bench,pg_stat_statements, EXPLAIN),run-all.sh, скрипты разбораperf/analysis/.perf/report-data/— сводные данные прогонов20261026-s1,20261026-s2,20261026-control-s1. Сырые трассы и heap snapshots (~4 ГБ) в git не попадают.perf/REPORT.md— 13 проблемных мест с цифрами, file:line и приоритетом; статический разбор без замера; что не удалось проверить.openspec/changes/perf-profiling/— дизайн и решения,docs/superpowers/plans/2026-10-25-perf-profiling.md— план.Топ-5 (CPU 1×, Apple M4; основная метрика — время главного потока на действие)
sxна каждую ячейку,offsetHeightвmeasureElement, не заданmemoMode(RealtimeTable.jsx:37-43,:344-441;tableConfig.js)Svod2Page.jsx:465-481;summary.py:93-121)0033_form2_old_sort.sql:1460-1466,:1527-1534;websocket.py:973-1130)v3.jsonb_sum(0010_form4.sql:269-297;0012_del_project.sql:1418-1481)RealtimeTable.jsx:106-108,:851-871;TableDictVsp.jsx:238-247)Память: число DOM-узлов, обработчиков и WebSocket за 20 циклов не меняется. JS-heap растёт на 24–44 КБ за цикл, на 20 циклах это неубедительно. Растут нативные объекты
MediaQuery*, время цикла выросло на 12% (М13).Решения человека (design.md, «Decisions made with the human»)
Rulings I made
svods/modal_pagesманифеста поRoutes.jsx. Цена ошибки: доработка T3 при T5/T7.perfkit/gen/grow.py, без пересоздания БД; grow запускается после скролл-сценариев. Фактически выращены FORM_2/AHR_UTILITY и AHR_SECURITY до 500 строк и FORM_4/CAP до 300; AHR_RENT и FORM_4/AHR остались малыми (отклонение исполнителя, одобрено ревью). Цена ошибки: БД после grow отличается от базовой, скролл по этим листам до и после grow несопоставим.run-all.sh) и T10b (анализ и отчёт), многочасовой прогон вёл контроллер. Цена ошибки: лишний диспатч.PERF_S2_REPEATS=1) по правилу человека (3 повтора ≈ 13 ч), на масштабе 1 — 3 повтора. Цена ошибки: для масштаба 2 нет разброса и p95.cell_updated. Цена ошибки: нет замера соавтора на FORM_4.Финальное ревью ветки (opus)
Critical — нет. Important I-1…I-4 и Minor M-1…M-12 исправлены (
5f4afc0,bc52212), после scoped re-review — all findings addressed.Deferred
Находки по приложению:
/api/v1/users/meотвечает 500 для email с доменом.local(EmailStrв response_model)api/requirements-dev.txtнетgreenlet, без него падает alembicjsonb_sum), GET CAP на 300 строк — 1,7 с (REPORT М4)POST /projects: гонкаtechnical_number, 409 при параллельных запросахPOST /stages/formотвергает даты с часовым поясом; username ≥ 3 символов; STRUCTURE FORM_4 не меняется; WSprogram_addedна STRUCTURE → 404v_form_view(REPORT М3/М4)Находки по инструментам
perf/(minor):downоставляет внуков npx;allповторяетnpm ci; нет пинов версий_fmt; KeyError без сообщения;read_all; альтернатива медиане;Sheet.urlиbuild_urlauth.tsперезаписывает токен; cleanup теста; путь к.venv; duration +100 мс;run_idundefinedwanted()для/filter; tabIndex; тест оси x; skipLog; сигнатура фильтра; строка в designgrow-s1.json; манифест после листов;contract_number; широкие селекторыedits_ok; влияние snapshot; эвристика ячейки; refresh токена; traceback memtrend; формулировкаBUILDERS; timeout setup; bench SKIP;done>=5network.jsonlс паролем стенда (gitignored)Полная таблица находок со статусами — в ledger SDD (раздел
## Findings), при закрытии все deferred уйдут в follow-up issue.Не проверено
X-DB-Time-Ms.MediaQuery*.🤖 Generated with Claude Code
Checkout
From your project repository, check out a new branch and test the changes.