Tree shaking — это процесс оптимизации JavaScript-кода, при котором ненужные экспорты модулей удаляются из итогового бандла. В случае с Tippy.js эта техника особенно полезна, так как библиотека предоставляет множество функциональных возможностей, из которых могут использоваться лишь некоторые. Правильное применение tree shaking позволяет уменьшить размер финального скрипта и повысить производительность веб-приложения.
Tippy.js изначально разработан с поддержкой ES Modules (ESM). Основные модули включают:
Использование ESM позволяет современным сборщикам, таким как Webpack и Rollup, эффективно выполнять tree shaking, удаляя ненужные модули и функции.
Стандартный импорт всей библиотеки:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
Этот подход подключает весь функционал библиотеки, включая анимации и темы, даже если они не используются. Для минимизации веса скрипта применяется модульный импорт:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
tippy('.btn', {
content: 'Tooltip example',
});
Если нужны только определенные анимации:
import { fade } from 'tippy.js/animations';
tippy('.btn', {
content: 'Fade tooltip',
animation: fade,
});
Использование именованного импорта гарантирует, что ненужные анимации не попадут в финальный бандл.
Webpack: Для эффективного tree shaking важно
использовать production mode и
ESM-пакеты. В webpack.config.js это
настраивается через:
module.exports = {
mode: 'production',
optimization: {
usedExports: true,
},
};
Rollup: Rollup изначально ориентирован на ESM и выполняет tree shaking автоматически. Пример конфигурации:
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
},
plugins: [resolve(), commonjs()],
};
Важно: для корректного удаления неиспользуемого кода библиотека должна предоставлять ES Module версии всех функций, что Tippy.js выполняет через ESM-экспорты.
require и CommonJS при использовании
tree shaking: ESM позволяет сборщику точно определить
неиспользуемый код.import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
import { scale } from 'tippy.js/animations';
import { sticky } from 'tippy.js/plugins';
tippy('.tooltip', {
content: 'Optimized tooltip',
animation: scale,
plugins: [sticky],
});
В этом примере:
scale) и один плагин
(sticky).Для оценки влияния tree shaking на размер бандла используются инструменты:
Регулярная проверка позволяет убедиться, что ненужные функции Tippy.js не включаются и размер скрипта минимален.
Tree shaking в Tippy.js обеспечивает значительное снижение размера бандла при сохранении всей необходимой функциональности и гибкости для современных веб-приложений.