Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: manual, virtualization, scroll, calculation

Как в целом можно реализовать виртуализацию без библиотек?

Вопрос проверяет понимание базовых принципов виртуализации и умение реализовать их вручную.

Короткий ответ

Виртуализация без библиотек реализуется через расчёт видимой области и рендер только нужных элементов. Используется контейнер со скроллом, вычисляется диапазон индексов, которые должны быть показаны. Остальное пространство компенсируется отступами. Такой подход требует аккуратных расчётов и оптимизации.

Длинный ответ

Самописная виртуализация — это управляемый компромисс между сложностью и контролем.

Базовая идея

Нужно ответить на три вопроса:

  • какая часть списка видна

  • какие элементы туда попадают

  • где должен начинаться и заканчиваться контент

Минимальный алгоритм

  1. Известны:

    • высота контейнера

    • высота одного элемента

  2. По scrollTop вычисляется:

    • startIndex

    • endIndex

  3. Рендерятся элементы:

    • только в диапазоне [startIndex, endIndex]

  4. Компенсация прокрутки:

    • padding-top = startIndex * itemHeight

    • padding-bottom = (total - endIndex) * itemHeight

Упрощённый пример логики

const start = Math.floor(scrollTop / itemHeight)
const visibleCount = Math.ceil(containerHeight / itemHeight)
const end = start + visibleCount

Основные сложности

  • разные высоты элементов

  • плавность скролла

  • частые пересчёты при scroll

  • поддержка resize

Из-за этих сложностей библиотеки и остаются популярными.

Когда самописная реализация оправдана

  • очень специфические требования

  • минимальный бандл

  • полный контроль над логикой

Краткий вывод

Виртуализация без библиотек строится на расчёте видимой области и управлении отступами. Это возможно, но требует аккуратной реализации и понимания внутренних механизмов браузера.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#manual

#virtualization

#scroll

#calculation

Подпишись на React Developer в телеграм