Tree Shaking — это метод оптимизации JavaScript-кода, который позволяет удалять неиспользуемые части библиотек и модулей при сборке приложения. В контексте ScrollMagic, это особенно важно, так как библиотека предоставляет множество функциональных модулей, но не все они нужны в каждом проекте. Использование Tree Shaking помогает сократить размер итогового бандла и ускорить загрузку страницы.
ScrollMagic построен вокруг нескольких ключевых компонентов:
animation.gsap для интеграции с
GSAP.При стандартной установке через npm можно импортировать
только нужные модули:
import { Controller, Scene } from 'scrollmagic';
Импорт всего пакета целиком приводит к включению дополнительных функций и плагинов, что увеличивает размер бандла.
Подключение ScrollMagic через <script> тег или
через единый пакет:
<script src="scrollmagic.min.js"></script>
не позволяет сборщикам, таким как Webpack или Rollup, удалить неиспользуемый код, так как весь файл воспринимается как единый модуль.
Использование ES6-модулей обеспечивает возможность Tree Shaking:
import { Controller, Scene } from 'scrollmagic';
Таким образом, ненужные плагины и индикаторы не включаются в финальный бандл.
Если проект не использует GSAP или другие плагины, их не стоит импортировать:
// Не нужно, если анимация GSAP не используется
// import 'scrollmagic/scrollmagic/uncompressed/plugins/animation.gsap';
production, чтобы включить минификацию и оптимизацию:module.exports = {
mode: 'production',
// другие настройки
};
package.json:{
"sideEffects": false
}
Это сообщает Webpack, что модули не имеют побочных эффектов, что критично для корректного удаления неиспользуемого кода.
Rollup изначально ориентирован на ES-модули и поддерживает Tree Shaking “из коробки”. Для ScrollMagic достаточно:
import { Controller, Scene } from 'scrollmagic';
и настроить rollup.config.js:
export default {
input: 'src/index.js',
output: {
file: 'bundle.js',
format: 'esm'
},
plugins: [
resolve(),
commonjs()
]
};
<script> в продакшене.webpack-bundle-analyzer.import { Controller, Scene } from 'scrollmagic';
// Создание контроллера
const controller = new Controller();
// Создание сцены
const scene = new Scene({
triggerElement: "#trigger",
duration: 200,
offset: 50
})
.setClassToggle("#animate", "visible")
.addTo(controller);
В этом примере импортированы только Controller и Scene, индикаторы и плагины не включены, что делает бандл максимально компактным и оптимизированным.
Tree Shaking в ScrollMagic позволяет строить легкие, быстрые веб-приложения, избегая лишнего кода и сохраняя производительность на высоком уровне.