До Снежный покров Наступил на сцену, пакет приложений был единственным способом встряхивания дерева (устранение мертвого кода) в Интернете.
Но снежный покров — это несекретный. Он работает только на ваших зависимостях, не касаясь кода вашего приложения. Так как это может дерево-дрожать?
Вот быстрый пост о том, как мы сделали эту оптимизацию производства для более быстрых производственных приложений, благодаря некоторой необходимой справке от Rollupjs команда 🙌.
Настройка
Bundlers «Tree-Shake» Ваше веб-приложение, находя и удалив неиспользуемый код, брить ценные байты при развертывании до производства.
Так как SnowPack никогда не затрагивает ваш код заявки, как мы можем сделать то же самое? Мы должны были получить творческое.
SnowPack V1.0 добавил начальную «сканировать» фазу за - Соверните
флаг. Он запускает быстрое сканирование вашего приложения, чтобы узнать, как вы используете каждую зависимость.
… вот и все! Передаем эту информацию нашим внутренним установщикам (питание от Rollup) и устранить любой мертвый код во время установки.
Соревнование
«Передача этой информации на наш установщик накапливателя» Была интересная задача: как вы прокатаете этот код в своем выходе в верхнем уровне не используется?
Это был необычный запрос, и что-то команда рулона (по праву!) Не хотела построить в сам Бандлер.
Мы создал проблему на Rollup Repo, чтобы набросить проблему, а с @Lukastaegert Помощь придумала действительно умное решение через новый плагин …
Вот как мы это решили: Мы создаем обертку в памяти «конверт» для свертывания каждые изображения и заполните его точным импортом, используемым вашим приложением.
Сверток видит конверт, читает отсканированное импорт в реальные DEP, а затем автоматически качает дерево, все не найдено в ✉️ Вы можете точно видеть, как это работает здесь, входит в Только ~ 50 loc Отказ
Это все бежит за только для производства - Соверните
Флаг, чтобы вы могли добавить и удалять импорт, когда вы разрабатываете свое приложение, не беспокоясь о встряхивании или необходимости повторно установить в качестве изменения кода.
Но даже при оптимизации для производства, просто чтение и сканирование вашего приложенного кода должно быть черт возникать намного быстрее, чем чтение, сканирование и соединение вашего кода приложения с традиционным Bundler (так что вы все равно можете ожидать быстрого развертывания производства).
Что дальше?
Мы экспериментируем с заменой нашего текущего импортного сканера с еще более быстрее ES-Module-Lexer по @guybedford С Образованный сканер, написанный в C.
Guybedford/ES-Module-Lexer
Низкоустройший лексера, посвященный анализу модуля ES для быстрого анализа
Модуль JS Syntax Lexer используется в ES-Module-Shims Отказ
Выводит список экспорта и местоположений спецификаторов импорта, включая динамический импорт и импортную мета-обработку.
Очень маленький файл js (4kib gziped), который включает в себя включенную веб-сборку для очень быстрого анализа синтаксиса модуля Ecmascript.
Для примера производительности угловые 1 (720KIB) полностью проанализированы в 5 мс, по сравнению с самым быстрым парсером JS, erorn, который занимает более 100 мс.
Всесторонне обрабатывает грамматику JS языка, оставаясь маленькими и быстрыми. — ~ 10 мс на MB js Cold и ~ 5 мс на MB js тепло, Смотрите тесты для получения дополнительной информации.
Применение
npm install es-module-lexer
Для использования в Commonjs:
const { init, parse } = require('es-module-lexer'); (async () => { // either await init, or call parse asynchronously // this is necessary for the Web Assembly
Спасибо за прочтение!
Наслаждался этим постом? Бросить SnowPack aon Gh, чтобы помочь распространить слово:
Пикапкг/Снежный покров
Инструмент Below-Instant Build для современных веб-приложений.
Что такое снежный покров?
SnowPack — это современный, легкий инструментарий для разработки веб-приложений. Традиционные Dev Bundlers, такие как WebPack или посылка, должны перестроить и перевернуть целые кусочки вашего приложения каждый раз, когда вы сохраняете один файл. Это вводит отставание между изменением файла и видеть эти изменения, отраженные в браузере, иногда так же медленно, как несколько секунд.
Снежный покрова решает эту проблему, обслуживая ваше приложение разделен в развитии. В любое время вы меняете файл, SnowPack никогда не перестраивает более одного файла. Там нет пакета, чтобы поговорить о нескольких миллисекундах одномалового восстановления, а затем мгновенное обновление в браузере через HMR. Мы называем этот новый подход O (1) Сборка инструментов. Вы можете прочитать больше об этом в нашем SnowPack 2.0 выпуск пост.
Когда вы готовы развернуть ваше веб-приложение для пользователей, вы можете добавить традиционный биндер, такой как WebPack или посылка. С снежным подом …
- Узнайте больше о SnowPack: https://www.snowpack.dev/
- Следуйте за нами в Twitter для обновлений: https://twitter.com/pikapkg.
- Читайте и поделитесь оригинальной нитью Twitter, на которой это основано: https://twitter.com/pikapkg/status/1217509391668133888.
Оригинал: «https://dev.to/pika/tree-shaking-without-a-bundler-here-s-how-snowpack-does-it-1fai»