Если вы когда то использовали webpack или rollup в больших проектах, то вы, вероятно, знаете, с какими трудностями приходится иметь дело из-за большого временем сборки между каждым изменением.
Это была одна из проблем, о которых думал Эван Ю, когда создавал Vite.
Он взглянул на существующие решения и подумал о том, как доработать дизайн.
Эти новые идеи стали возможными благодаря:
esbuild
, swc
)с этими новыми изменениями у него появилось видение нового инструмента (Vite), который позволяет:
С технической точки зрения было 3 ключевых архитектурных решения, которые позволили Vite достичь этих целей оптимизации.
Давайте пройдемся по ним один за другим.
Когда был представлен webpack, это был лучший инструмент на тот момент. Затем на сцену вышел rollup, это был новый сборщик с упором на простоту. Оба этих инструмента использовали очень похожий подход к сборке пакетов — когда файлы изменялись, они пересобирали весь пакет.
Это означает, что по мере роста вашей кодовой базы время сборки будет расти линейно с этим увеличением.
Это приводит к вопросу, почему мы не можем просто собирать только измененные файлы (а не весь пакет)?
И это именно тот подход, который использовал Эван при разработке Vite.
Все эти решения стали возможными благодаря тому, что современные браузеры теперь поддерживают Native ESM.
Давайте рассмотрим 3 ключевых архитектурных свойства Vite.
Первый момент делает возможными все остальные решения, и это было решение использовать Native ESM.
При этом Vite теперь может делегировать обработку системы модулей браузеру и просто выполнять обработку (транспиляцию, преобразование и т. д.) запрошенных модулей.
Это небольшие изменения фактически позволяют рассматривать работу Vite также, как перекомпиляция работает в среде разработки.
Благодаря использованию Native ESM Эван теперь может переосмыслить то, как работает жизненный цикл сборки.
Одна из таких идей — разделить исходный код и зависимости.
На самом деле это было одним из основных узких мест в сборщиках, таких как webpack и rollup.
Разделение этих двух компонентов позволило Эвану перепроектировать сборщик, чтобы он лучше соответствовал жизненному циклу каждого из этих вариантов использования независимо друг от друга.
Варианты использования:
Исходный код – часто меняется
Зависимости – меняется реже
Когда происходят изменения, вместо того, чтобы каждый раз перестраивать весь пакет, Vite будет просто обслуживать модули по запросу.
Это делается с помощью Vite .
В этом разделе мы рассмотрели только перекомпиляцию.
А зависимости? Как Vite справляется с этой частью?
Вот где вступает в действие предварительная комплектация.
Для дальнейшей оптимизации процесса сборки Vite предварительно соберет зависимости в вашем проекте.
Он делает это, просматривая исходный код и выясняя, какие зависимости необходимо предварительно связать, а затем запустит их через esbuild.
Выходные данные кэшируются в файловой системе на основе файлов блокировки lockfiles, и затем они будут аннулированы (invalidated) по мере необходимости.
Итак, это означает, что больше не нужно пересобирать при каждом изменении!
Помимо предварительной сборки зависимостей, Vite также выполняет следующую оптимизацию в процессе сборки:
Итак, я рассказал, что Эван Ю (создатель Vite) принял 3 ключевых решения, которые позволяют повысить общую производительность во время сборки по мере увеличения размера вашей кодовой базы.
Это все что я хотел написать. Надеюсь, вы узнали что-то новое!
Если вы нашли это полезным или узнали что-то новое, поделитесь этой статьей с другом или коллегой 🙏❤️! (Спасибо!)
Перевод статьи: Vite: How It Achieves Constant Time Builds
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…