advanced
Виртуализация
Рендерьте только видимые строки, карточки или ячейки в больших коллекциях, сохраняя accessibility, focus и корректность измерений.
Виртуализация (windowing) рендерит только видимые строки или ячейки в больших списках/таблицах, ограничивая число DOM-узлов. Библиотеки вроде `react-window` или TanStack Virtual считают scroll и монтируют только видимый диапазон.
// Идея: рендер только [startIndex, endIndex]
const rowHeight = 48;
const visibleCount = Math.ceil(viewportHeight / rowHeight) + overscan;
| Задача | Подход | |--------|--------| | Переменная высота строки | Measure/estimate; remeasure при resize | | Accessibility | Сохранять focus и keyboard nav при scroll | | Selection | selected ID вне DOM | | Infinite load | Следующая страница у конца scroll |
Виртуализация помогает INP и памяти на таблицах 10k+ строк, но усложняет код. Короткие списки не виртуализируйте — overhead больше пользы.
На интервью: fixed vs dynamic height; компромисс overscan; virtualization и screen readers; когда проще pagination.
Типовые ошибки: сломанная keyboard navigation; jank от measure layout; равная высота при переносе текста.
Компромисс — эффективность DOM против сложности реализации и a11y.
Чеклист:
- Виртуализация только когда list size бьёт по метрикам.
- Тест keyboard и screen reader.
- Стабильная высота строк или аккуратный measure.
- Selection state в данных, не в DOM.