Библиотека fullPage.js реализует полноэкранную прокрутку за счёт управления положением секций через трансформации и обработку событий прокрутки. Основная нагрузка ложится на:
transform, top,
left)scroll, wheel,
touchmove)Ключевая задача оптимизации — минимизировать количество перерисовок (reflow/repaint) и снизить нагрузку на основной поток JavaScript.
Наиболее эффективный способ перемещения элементов — использование
transform: translate3d(...). В fullPage.js это уже
применяется, но при кастомизации важно не нарушить этот принцип.
Почему это важно:
transform не вызывает reflowtranslate3d включает GPU-ускорениеРекомендации:
top, margin,
height при анимацииtransform и opacity
для анимацийcss3: trueОпция css3 включает использование CSS3-трансформаций
вместо JavaScript-анимаций.
new fullpage('#fullpage', {
css3: true
});
Преимущества:
Когда отключать:
Каждая секция (.section) участвует в вычислениях
позиционирования. Большое количество секций увеличивает:
Практика оптимизации:
fullPage.js поддерживает отложенную загрузку изображений через
атрибут data-src.
<img data-src="image.jpg" class="fp-lazy">
Механизм:
Дополнительные меры:
loading="lazy" для браузерной
поддержкиОбработчики событий могут вызывать “тормоза” при неправильной реализации.
Проблема:
wheel,
scroll)Решения:
passive: true для слушателейwindow.addEventListener('wheel', handler, { passive: true });
function throttle(fn, delay) {
let last = 0;
return function (...args) {
const now = Date.now();
if (now - last >= delay) {
last = now;
fn.apply(this, args);
}
};
}
Глубокая вложенность и сложные селекторы замедляют рендеринг.
Рекомендации:
*)Пример плохой структуры:
.section .container .content .block p span { ... }
Оптимизированный вариант:
.block-text { ... }
Операции, вызывающие reflow:
width, height)offsetHeight,
clientWidth)Стратегии:
requestAnimationFramerequestAnimationFrame(() => {
element.style.transform = 'translateY(100px)';
});
Некоторые опции fullPage.js увеличивают нагрузку:
scrollOverflow: true — добавляет внутренние
скроллыparallax: true — создаёт дополнительные вычисленияcontinuousVertical: true — усложняет логику
переходовОптимизация:
Этот плагин использует сторонние библиотеки для имитации прокрутки внутри секции.
Проблемы:
Рекомендации:
overflow: autoЧастые ошибки:
box-shadow, filterwidth и heightЛучшие практики:
opacity и transformwill-changeCSS-свойство will-change сообщает браузеру о будущих
изменениях.
.section {
will-change: transform;
}
Эффект:
Важно:
Секции, находящиеся вне экрана, продолжают существовать в DOM.
Оптимизация:
display: none)Частые вычисления размеров и позиций приводят к снижению производительности.
Подход:
let sectionHeight = window.innerHeight;
window.addEventListener('resize', () => {
sectionHeight = window.innerHeight;
});
Основные принципы:
Пример делегирования:
document.addEventListener('click', (e) => {
if (e.target.matches('.button')) {
// обработка
}
});
Особенности:
Рекомендации:
@media (max-width: 768px) {
.heavy-animation {
animation: none;
}
}
Инструменты:
Что анализировать:
css3: trueКаждая дополнительная функция влияет на рендеринг. Оптимизация заключается не только в ускорении, но и в осознанном ограничении:
Эффективная работа fullPage.js достигается не только настройками библиотеки, но и архитектурой всего фронтенда.