Вопрос проверяет понимание производительности и альтернатив при определении прокрутки до конца страницы.
Событие scroll срабатывает при каждом пикселе прокрутки, что может вызывать до 60-120 вызовов в секунду. Если в обработчике выполняются тяжелые операции (например, вычисления позиции элемента или запросы к DOM), это может привести к заметным тормозам интерфейса.
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
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию