Виртуализация списков — это техника оптимизации отображения длинных наборов данных в интерфейсе. Она заключается в том, что в DOM рендерятся только видимые элементы списка, а элементы вне области видимости создаются и удаляются динамически по мере прокрутки. Это позволяет существенно снижать нагрузку на браузер и повышает производительность.
Основная идея виртуализации состоит в следующем:
Preact, будучи лёгкой альтернативой React, позволяет использовать тот же подход, что и в React, с минимальными изменениями. Основные шаги:
overflow: auto.const containerStyle = {
height: '400px',
overflow: 'auto',
position: 'relative'
};
scrollTop).function getVisibleRange(scrollTop, itemHeight, containerHeight, totalItems) {
const startIndex = Math.floor(scrollTop / itemHeight);
const visibleCount = Math.ceil(containerHeight / itemHeight);
const endIndex = Math.min(startIndex + visibleCount + 2, totalItems);
return [startIndex, endIndex];
}
absolute внутри
контейнера.function VirtualList({ items, itemHeight, containerHeight }) {
const containerRef = useRef(null);
const [scrollTop, setScrollTop] = useState(0);
const onScr oll = (e) => setScrollTop(e.target.scrollTop);
const [start, end] = getVisibleRange(scrollTop, itemHeight, containerHeight, items.length);
const visibleItems = items.slice(start, end);
return (
<div ref={containerRef} style={{ ...containerStyle, height: containerHeight }} onScr oll={onScroll}>
<div style={{ height: items.length * itemHeight, position: 'relative' }}>
{visibleItems.map((item, index) => (
<div
key={start + index}
style={{
position: 'absolute',
top: (start + index) * itemHeight,
height: itemHeight,
width: '100%'
}}
>
{item}
</div>
))}
</div>
</div>
);
}
Буферизация элементов. Для плавной прокрутки часто рендерят несколько элементов за пределами видимой области, чтобы избежать «мерцания» при быстром скролле.
Динамическая высота элементов. В случаях, когда высота элементов неизвестна заранее, применяются техники измерения и кэширования высот, с последующим перерасчётом позиции элементов.
Компоненты высшего порядка (HOC). Создание обёртки над списком позволяет повторно использовать логику виртуализации без дублирования кода.
Использование сторонних библиотек. Для Preact
доступны адаптированные библиотеки, такие как
preact-virtual-list, обеспечивающие готовую реализацию
виртуализации с поддержкой событий и плавного скролла.
preact/compat.Виртуализация списков является обязательной практикой при работе с крупными данными и обеспечивает оптимальный баланс между производительностью и удобством пользователя. С применением правильной структуры и продуманного рендеринга Preact позволяет создавать быстрые и отзывчивые интерфейсы, способные обрабатывать огромные объёмы данных без заметных тормозов.