Минификатор
Минификация JavaScript уменьшает объём данных до браузера и ускоряет загрузку страниц. Для крупной коммерции каждая секунда на счету.
Обычно приходится выбирать между качеством сжатия и скоростью. Что если сделать минификатор быстрее без заметной потери качества?
Цели проекта
Мы переносим тест-кейсы из известных минификаторов — google-closure-compiler, terser, esbuild, tdewolff-minify.
Предварительные результаты показывают, что можно ускорить минификацию без ущерба для степени сжатия.
Целевые показатели
- Скорость: быстрее Terser, на уровне esbuild
- Сжатие: не хуже Terser
- Корректность: проход основных тестовых наборов
Архитектура
Принципы
- С учётом семантики — безопасные оптимизации
- Инкрементальность — для инкрементальных пайплайнов
- Настраиваемость — уровни и цели сборки
- Корректность важнее агрессии
Текущее состояние
Реализовано
- ✅ Удаление мёртвого кода
- ✅ Свёртка констант
- ✅ Tree shaking экспортов (базово)
- ✅ Слияние объявлений переменных
- ✅ Слияние операторов
- ✅ Манглинг имён
- ✅ Упрощение потока управления
- ✅ Инлайн маленьких функций
- ✅ Расширенный tree shaking между модулями
Производительность
- Меньше проходов по AST — объединение оптимизаций
- Арены и компактные структуры
- Ранний выход, если выгоды нет
Ресурсы
Документация
Внешние материалы
Песочницы
- esbuild: https://esbuild.github.io/try
- rollup: https://rollupjs.org/repl
- swc: https://play.swc.rs
- terser: https://try.terser.org
- closure compiler: https://jscompressor.treblereel.dev
- Официальный веб-сервис закрыт: Closure Compiler Webservice Turndown - 2025