AURORA-1841: справочник ВСП - виртуализация строк и вынос состояния модалок #219
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/214-aurora-1841-dict-vsp-virtual"
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?
Closes #214
Jira: AURORA-1841
Что сделано
open,editingItem,exportOpen,saveLoading,handleSave) вынесено изTableDictVspв новыйDictVspModals(forwardRef+useImperativeHandle:openAdd,openEdit(item),openExport). Открытие модалки больше не перерисовывает MRT-таблицу.TableDictVspобёрнут вmemo; колбэкиonAddClick/onEditClick/onExportClickвDictVspPageстабильные (useCallback+ ref на модалки);handleAdd/handleEdit/handleDeleteобёрнуты вuseCallback.enableRowVirtualization,overscan: 5,estimateSize54). Высота строк измеряется MRT по умолчанию, потому что «Примечания» многострочные (pre-wrap); осознанное отличие от 1836.size/minSize/maxSizeколонок выверены под grid-раскладку (былоsize > maxSizeу «Код РФ»; ширины подняты под длину заголовков и адресов, чтобы ничего не обрезалось).utils/filterVspBySsp.js.Тесты
web/src/pages/DictVspPage/utils/filterVspBySsp.test.js- 3 теста,node --test: 3 pass, 0 fail.npm run buildпроходит. biome: новых нарушений нет (остались прежниеconsole,==).Проверить руками
Роли admin и executor_dfip:
Роль executor_rf: фильтров нет, таблица и экспорт работают.
Замер до/после
Будет добавлен после ночного прогона на стенде perf/. Сценарий: модалки
dict_vsp_*на масштабе 1 (PERF_MODALS='dict_vsp_*' PERF_REPEATS=5 npx playwright test scenarios/modals.spec.ts; метрикиclick_to_visible_ms,main_thread_ms; база 167/193/159 мс) + разовый замер на 720 ВСП доращиванием черезcreate_vspпосле остальных замеров.Rulings I made
columns.estimateSize= 54 px (padding 2*0.75rem + строка 18 px). Цена ошибки: небольшие прыжки скроллбара.🤖 Generated with Claude Code
Ночной замер на стенде perf/ (29.10, масштаб 1 = 180 ВСП, D0 без grow, CPU 1x, arm-ka-* остановлены; Apple M4)
Сборки: «до» —
test2a28748; «после» — этот PRb0de763. Данные и API одни.Команда:
PERF_MODALS='dict_vsp_*' PERF_PRIORITY=2 PERF_REPEATS=5 npx playwright test scenarios/modals.spec.ts; рендеры — профилирующая сборка :8081PERF_PROFILING=1 PERF_REPEATS=1.Таблица выпала из коммита открытия: в «до» в топе
Styled(td)2 896 рендеров иMRT_TableBodyCell2 880, в «после» — только поля формы (DateField,DesktopDatePicker).Вердикт: критерий Jira «≤ 60 мс при 720 ВСП» на 180 ВСП: edit 52.0 и export 54.1 — в пределах, add 74.6 — выше 60 (14 мс self React — DateField/DesktopDatePicker модалки). Замер на 720 ВСП (доращивание
create_vsp) — в плане после всех замеров; если не успею — отмечу в итоговом комментарии.Скриншоты справочника (1600×900, верх и конец списка): до —
night/base/shots/base-dictvsp-1600-{top,end}.png, после —night/1841/shots/p1841-dictvsp-1600-{top,end}.png; каталог/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/. Попиксельная сверка — в итоговом комментарии.🤖 Generated with Claude Code
Ночной замер — часть 2 (итог)
Сборки как в части 1 (до —
test, после —b0de763). Добавлено: 720 ВСП, сверка скриншотов, combo.720 ВСП (D1 + доращивание до 720 записей
create_vspодинаково для обеих сборок;PERF_MODALS='dict_vsp_*' PERF_PRIORITY=2 PERF_REPEATS=5), click_to_visible_ms, медиана [min–max]:Styled(td)11 536 → нет в топе. Остаток add —DateField/DesktopDatePicker.combo (180 ВСП): add 68.3, edit 48.7, export 56.8 (одиночная 1841: 74.6 / 52.0 / 54.1; export на 5 % выше внутри разброса 51.7–60.0).
Сверка скриншотов 1600×900, верх и конец списка (base против p1841): 6,3 % пикселей, и в combo ровно столько же. На картинках не косметика:
То же на 720 ВСП (
vsp720/shots). Причина не установлена (возможно, виртуализация колонок по ширине окна); проверить руками до мержа.Сравнить:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/base/shots/base-dictvsp-1600-top.pngи/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/1841/shots/p1841-dictvsp-1600-top.png, разница —/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/imgdiff/diff-p1841-dictvsp-1600-top.png.Вердикт по цели Jira (≤ 60 мс при 720 ВСП): edit и export — выполнен; add — не выполнен (69.4). Критерий «ячейки не рендерятся при открытии» — выполнен.
Файлы:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/vsp720/, прогоныperf/report-data/n-{base,p1841}-vsp720.Разбор ночной находки: «пропавшие» колонки справочника — исправлено
Колонки не пропадали: виртуализация строк включила grid-раскладку (ширина = size), а ширины колонок были подняты (R-1 исполнителя) — таблица стала шире на 600 px, «Дата закрытия ВСП» и «Форма расположения ВСП» ушли под закреплённую справа «Действия».
bf64fa0— ширины как в test (измерены в браузере, 1600×900); у «Региональный филиал/ССП» maxSize поднят до 200, чтобы вместить фактические 186 px.7b67740— заголовок «Действия» был на 10 px ниже (в grid th — flex-колонка, align center центрировал по вертикали):justifyContent: 'flex-start'.Проверка в браузере: ширины всех 16 колонок и scrollWidth (2330 против 2331) совпадают с test.