Locomotive Scroll — современная библиотека для плавного скроллинга и параллакс-эффектов на веб-страницах. При использовании в реальных проектах важно оптимизировать её размер и производительность через минификацию и сборку.
Библиотека доступна как через CDN, так и через пакетный менеджер npm:
npm install locomotive-scroll
После установки можно импортировать её в проект:
import LocomotiveScroll from 'locomotive-scroll';
import 'locomotive-scroll/dist/locomotive-scroll.css';
Если используется сборщик модулей, такой как Webpack, Rollup или Vite, импорт позволяет применять tree-shaking и минимизацию автоматически.
Минификация — процесс удаления из кода всего лишнего: пробелов, переносов строк, комментариев и неиспользуемых переменных. Это уменьшает размер файлов и ускоряет загрузку страницы.
Примеры инструментов для минификации:
// Webpack конфигурация
module.exports = {
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
compress: { drop_console: true },
output: { comments: false },
},
}),
],
},
};
module.exports = {
plugins: [
require('cssnano')({
preset: 'default',
}),
],
};
Минификация особенно эффективна при использовании вместе с tree-shaking, так как неиспользуемый функционал библиотеки не попадет в финальный бандл.
Сборка объединяет все модули, стили и ресурсы в один или несколько оптимизированных файлов для продакшена. Для Locomotive Scroll важно:
scroll.update() или
scroll.destroy()), сборщик может исключить неиспользуемые
части библиотеки.if (window.innerWidth > 768) {
import('locomotive-scroll').then(({ default: LocomotiveScroll }) => {
const scroll = new LocomotiveScroll({ el: document.querySelector('#scroll-container'), smooth: true });
});
}
Webpack:
mode: 'production' для включения
минификации.css-loader и
MiniCssExtractPlugin позволяет включить CSS в бандл.Vite:
vite build).Rollup:
@rollup/plugin-node-resolve для
npm-пакетов.rollup-plugin-terser минимизирует JS.rollup-plugin-postcss обрабатывает CSS.data-scroll-section. Если в проекте много скрытых блоков,
они могут увеличить бандл и нагрузку. Удаление или динамическая
генерация секций снижает нагрузку.scroll.update() после
сборки.sourceMap: true. Это позволит видеть
исходный код в DevTools.bundle.[hash].js), чтобы браузер
корректно обновлял версию при изменении.const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
filename: 'bundle.[contenthash].js',
path: __dirname + '/dist',
},
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'],
},
],
},
plugins: [new MiniCssExtractPlugin({ filename: 'styles.[contenthash].css' })],
optimization: {
minimize: true,
minimizer: [new TerserPlugin({ terserOptions: { compress: { drop_console: true } } })],
},
};
Эта конфигурация объединяет все JS и CSS, минифицирует код и создаёт файлы с хешем для кэширования, что идеально подходит для использования Locomotive Scroll на продакшн-сайтах.
Минификация и сборка обеспечивают не только меньший размер файлов, но и стабильную работу плавного скроллинга, уменьшение нагрузки на CPU и улучшение UX при параллакс-эффектах.