Tree shaking — это процесс удаления неиспользуемого кода из итогового бандла JavaScript. В контексте библиотеки Cash этот подход особенно важен, так как Cash является облегчённой альтернативой jQuery, и одним из её преимуществ является минимальный размер. Правильное использование tree shaking позволяет уменьшить объём подключаемого кода и ускорить загрузку страниц.
Tree shaking работает на уровне ES-модулей (ESM). Для того чтобы Cash корректно участвовал в tree shaking, библиотека экспортирует функции как именованные экспорты, а не через единый объект. Например:
import { addClass, removeClass } from 'cash-dom';
$('#element').addClass('active');
В этом примере в итоговый бандл попадут только функции
addClass и removeClass, если остальные функции
Cash не используются. Если же использовать:
import $ from 'cash-dom';
то весь код библиотеки будет включён в бандл, потому что
$ представляет собой объект с полной функциональностью
Cash.
Tree shaking реализуется сборщиками, такими как Webpack, Rollup или Vite. Для корректной работы необходимо:
production, чтобы
активировались оптимизации, включая удаление мёртвого кода.Пример конфигурации Webpack для tree shaking:
module.exports = {
mode: 'production',
optimization: {
usedExports: true,
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader',
},
],
},
};
Cash разработан модульно, каждая функция находится в отдельном файле и экспортируется индивидуально. Это позволяет сборщикам точно определять, какие части кода нужны. Например:
core.js — базовые функции, необходимые для работы всех
методов.manipulation.js — функции для работы с DOM, такие как
append, prepend.events.js — работа с событиями, например,
on, off, trigger.Использование отдельных функций напрямую минимизирует итоговый размер бандла:
import { on } from 'cash-dom';
on('#button', 'click', () => console.log('Clicked'));
В бандл попадёт только код, связанный с обработкой событий, без методов для манипуляции DOM или анимаций.
const method = 'addClass'; $(el)[method]('active'); не
позволяет сборщику определить, что используется addClass. В
этом случае весь модуль может попасть в бандл.$ как глобального объекта блокирует удаление
неиспользуемого кода.$ в проектах с
большой функциональностью: вместо него лучше прямой импорт
методов.В отличие от jQuery, Cash изначально ориентирован на модульность и tree shaking, что делает его более современным и лёгким решением. В jQuery практически весь код включается в бандл, даже если используется одна функция, тогда как Cash позволяет включать только необходимый минимум.
Tree shaking в Cash позволяет:
Оптимальная практика — комбинировать именованные импорты, ES-модули и сборщики с поддержкой tree shaking, чтобы использовать Cash максимально эффективно.