Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: scroll event, performance, Intersection Observer, throttle, debounce

Чем плох вариант с прослушиванием события window scroll для определения достижения конца страницы?

Вопрос проверяет понимание производительности и альтернатив при определении прокрутки до конца страницы.

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

Прослушивание события scroll срабатывает очень часто, вызывая перерасчеты и потенциальные лаги. Это может привести к проблемам с производительностью, особенно на мобильных устройствах. Вместо этого рекомендуется использовать Intersection Observer API, который более эффективен и не вызывает лишних перерисовок.

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

Проблемы с событием scroll

Событие scroll срабатывает при каждом пикселе прокрутки, что может вызывать до 60-120 вызовов в секунду. Если в обработчике выполняются тяжелые операции (например, вычисления позиции элемента или запросы к DOM), это может привести к заметным тормозам интерфейса.

Альтернатива: Intersection Observer

Intersection Observer API позволяет асинхронно отслеживать видимость элемента относительно предка или окна просмотра. Он не блокирует основной поток и срабатывает только при изменении состояния видимости.

// Плохой подход: scroll event
window.addEventListener('scroll', () => {
  const scrollTop = window.scrollY;
  const docHeight = document.documentElement.scrollHeight;
  const winHeight = window.innerHeight;
  if (scrollTop + winHeight >= docHeight - 100) {
    loadMore();
  }
});

// Хороший подход: Intersection Observer
const sentinel = document.getElementById('sentinel');
const observer = new IntersectionObserver((entries) => {
  if (entries[0].isIntersecting) {
    loadMore();
  }
});
observer.observe(sentinel);

Когда использовать

Intersection Observer идеален для бесконечной прокрутки, ленивой загрузки изображений и анимаций при скролле. Он снижает нагрузку на основной поток и упрощает код.

Вывод: Для определения достижения конца страницы используйте Intersection Observer вместо scroll event — это повышает производительность и упрощает поддержку кода.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • HTML

    HTML

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

#scroll event

#performance

#Intersection Observer

#throttle

#debounce

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию