Профилирование производительности

Для начала необходимо подключить библиотеку fullPage.js. Она состоит из JavaScript-файла и CSS-стилей. Минимальный пример подключения выглядит следующим образом:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.25/fullpage.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.25/fullpage.min.js"></script>

Инициализация производится с помощью конструктора new fullpage():

new fullpage('#fullpage', {
    autoScrolling: true,
    navigation: true,
    scrollBar: false
});

Ключевые параметры:

  • autoScrolling – управление скроллингом страницы.
  • navigation – отображение навигационных точек.
  • scrollBar – использование стандартного скроллбара браузера.

Метрики производительности

Основные метрики для анализа работы fullPage.js включают:

  1. FPS (Frames per Second) – частота кадров при прокрутке.
  2. Time to Interactive (TTI) – время до полной интерактивности страницы.
  3. Memory Usage – потребление оперативной памяти браузером.
  4. Main Thread Activity – нагрузка на основной поток выполнения JavaScript.

Для точного измерения этих показателей можно использовать инструменты браузера, такие как Chrome DevTools, вкладка Performance.

Инструменты профилирования

  • Chrome DevTools – вкладка Performance позволяет записывать сеанс работы страницы и анализировать затраты на рендеринг и выполнение скриптов.
  • Lighthouse – автоматизированный анализ производительности, выявляющий узкие места в работе fullPage.js.
  • FPS Meter – сторонние библиотеки для мониторинга кадров в реальном времени.

Оптимизация прокрутки

  1. Использование scrollBar: true Включение нативного скролла уменьшает нагрузку на основной поток, особенно на мобильных устройствах.

  2. Минимизация тяжелых элементов внутри секций Анимации, видео и сложные DOM-структуры значительно замедляют рендеринг. Их лучше загружать по мере необходимости с использованием lazyLoad.

  3. Декомпозиция секций Если страница содержит большое количество секций, стоит разбивать их на подстраницы или использовать динамическую подгрузку контента.

  4. Отключение fitToSection и scrollOverflow при необходимости Эти опции требуют дополнительных вычислений при каждом скролле, что может снижать FPS.

Использование событий для анализа

fullPage.js предоставляет ряд событий, которые помогают анализировать производительность:

  • onLeave(origin, destination, direction) – срабатывает перед переходом между секциями.
  • afterLoad(origin, destination, direction) – фиксирует время загрузки новой секции.
  • afterRender() – позволяет определить момент полной инициализации библиотеки.

Пример профилирования времени загрузки секций:

new fullpage('#fullpage', {
    afterLoad: function(origin, destination, direction){
        console.timeEnd('Section Load: ' + destination.index);
    },
    onLeave: function(origin, destination, direction){
        console.time('Section Load: ' + destination.index);
    }
});

Минимизация перерасчетов стилей и рендеринга

  • Избегать inline-стилей при динамических анимациях, использовать классы CSS.
  • Использовать transform вместо top/left для анимаций смещения.
  • Debounce обработчиков событий – особенно для кастомных скролл-эффектов.

Lazy Load для секций и изображений

FullPage.js поддерживает динамическую подгрузку контента:

new fullpage('#fullpage', {
    lazyLoad: true
});
  • Секции загружаются по мере прокрутки.
  • Уменьшается первоначальное время загрузки.
  • Снижается потребление памяти на старте.

Интеграция с requestAnimationFrame

Для сложных анимаций и эффекта параллакса лучше использовать requestAnimationFrame вместо стандартного таймера setInterval:

function animate(){
    // кастомная анимация
    requestAnimationFrame(animate);
}
animate();

Такой подход синхронизирует анимацию с перерисовкой браузера, что улучшает плавность и снижает лаги при прокрутке секций fullPage.js.

Профилирование на мобильных устройствах

  1. Эмуляция в Chrome DevTools – вкладка Performance + эмуляция устройства.
  2. Реальные тесты – проверка на физических смартфонах с ограниченной памятью и мощностью процессора.
  3. Ограничение тяжелых анимаций – на мобильных лучше использовать упрощённые эффекты и отключать parallax.

Сбор данных для анализа

  • Встроенные логи через console.time и console.timeEnd.
  • Сторонние инструменты мониторинга FPS и времени ответа.
  • Использование API Performance: performance.now() для точных измерений JavaScript-кода.

Пример точного измерения времени рендеринга секции:

fullpage_api.setAllowScrolling(false);
let start = performance.now();

// симуляция тяжелой операции
setTimeout(() => {
    let end = performance.now();
    console.log('Render Time: ', end - start, 'ms');
    fullpage_api.setAllowScrolling(true);
}, 100);

Заключение по оптимизации

Профилирование производительности fullPage.js сводится к контролю:

  • FPS и плавности скролла;
  • нагрузки на основной поток браузера;
  • времени загрузки секций и элементов;
  • памяти, используемой библиотекой.

Правильная настройка опций, минимизация тяжелых DOM-операций и использование современных инструментов профилирования позволяют обеспечить плавную работу страниц с большим количеством секций и сложной анимацией.