Compression в контексте Stencil — это процесс минимизации и оптимизации финального бандла приложения для уменьшения размера перед отправкой на клиент. Это критически важно для повышения производительности, сокращения времени загрузки и улучшения пользовательского опыта.
Stencil автоматически использует Rollup в качестве сборщика модулей. Минификация происходит на этапе сборки и включает:
Для включения минификации достаточно правильно настроить stencil.config.ts:
import { Config } from '@stencil/core';
export const config: Config = {
namespace: 'my-component-library',
buildEs5: true,
minifyJs: true,
minifyCss: true,
outputTargets: [
{
type: 'www',
serviceWorker: null,
},
],
};
minifyJs: true — включает минификацию JavaScript.minifyCss: true — минимизирует встроенные и внешние
стили.Помимо минификации, важной практикой является сжатие бандла на уровне сервера с помощью Gzip или Brotli. Stencil позволяет интегрировать это через настройку серверной сборки или внешние инструменты.
Пример использования Gzip через Node.js при раздаче Stencil-приложения:
import express from 'express';
import compression from 'compression';
import path from 'path';
const app = express();
app.use(compression());
app.use(express.static(path.join(__dirname, 'www')));
app.listen(3000, () => console.log('Server running on port 3000'));
Здесь compression() автоматически сжимает все исходящие
файлы.
Stencil поддерживает code splitting — разделение кода на небольшие чанки, которые загружаются по мере необходимости. Это снижает первоначальный размер страницы и ускоряет загрузку.
lazyLoad:outputTargets: [
{
type: 'dist',
esmLoaderPath: '../loader',
dir: 'dist/components',
},
],
Хотя Stencil не занимается напрямую обработкой изображений, практика compression включает:
svgo.<img srcset> или
lazy-loading.Stencil интегрирован с Rollup, который выполняет tree-shaking — удаление неиспользуемого кода. Это особенно важно при создании библиотек компонентов:
Source maps важны для разработки, но их включение в production увеличивает размер бандла. Для максимальной compression:
export const config: Config = {
sourceMap: false,
minifyJs: true,
minifyCss: true,
};
Отключение source maps для продакшн-сборки уменьшает объем файлов на клиенте.
Stencil предоставляет инструмент stencil-analyzer и сторонние решения вроде rollup-plugin-visualizer, которые позволяют:
Для ещё более глубокой оптимизации можно использовать плагины Rollup:
rollup-plugin-terser для агрессивной минификации.rollup-plugin-brotli для автоматической генерации
Brotli файлов.rollup-plugin-cleanup для удаления лишних пробелов и
комментариев.Эти подходы обеспечивают максимальную compression без потери функциональности и позволяют создавать быстрые, лёгкие и современные веб-приложения на Stencil.