Skip to content

Минификатор

Минификация JavaScript уменьшает объём данных до браузера и ускоряет загрузку страниц. Для крупной коммерции каждая секунда на счету.

Обычно приходится выбирать между качеством сжатия и скоростью. Что если сделать минификатор быстрее без заметной потери качества?

Цели проекта

Мы переносим тест-кейсы из известных минификаторов — google-closure-compiler, terser, esbuild, tdewolff-minify.

Предварительные результаты показывают, что можно ускорить минификацию без ущерба для степени сжатия.

Целевые показатели

  • Скорость: быстрее Terser, на уровне esbuild
  • Сжатие: не хуже Terser
  • Корректность: проход основных тестовых наборов

Архитектура

Принципы

  1. С учётом семантики — безопасные оптимизации
  2. Инкрементальность — для инкрементальных пайплайнов
  3. Настраиваемость — уровни и цели сборки
  4. Корректность важнее агрессии

Текущее состояние

Реализовано

  • ✅ Удаление мёртвого кода
  • ✅ Свёртка констант
  • ✅ Tree shaking экспортов (базово)
  • ✅ Слияние объявлений переменных
  • ✅ Слияние операторов
  • ✅ Манглинг имён
  • ✅ Упрощение потока управления
  • ✅ Инлайн маленьких функций
  • ✅ Расширенный tree shaking между модулями

Производительность

  1. Меньше проходов по AST — объединение оптимизаций
  2. Арены и компактные структуры
  3. Ранний выход, если выгоды нет

Ресурсы

Документация

Внешние материалы

Песочницы