Несколько хитростей, чтобы лучше сжать ваш пакет для продакшена

Нас часто разочаровывает размер пакетов, генерируемых webpack. Тем не менее, webpack поставляется с встряхиванием дерева и поддержкой UglifyES, что помогает уменьшить размеры пакетов.

Вот несколько советов и приемов, которые помогут лучше использовать эти функции.

1) Используйте модули ES для зависимостей

В стандартном шаблоне Vue для Vue установлен псевдоним vue.esm.js. Мы могли бы сделать то же самое с другими модулями, такими как Vuex и сторонние модули. Модули ES, в отличие от модулей CommonJS или AMD, можно анализировать статически, что необходимо для встряхивания дерева.

2) Используйте среду выполнения Vue, когда шаблон не требуется

К настоящему времени мы использовали псевдоним vue для vue.esm.js, который поддерживает встряхивание дерева, но, к сожалению, не устраняет компилятор, который отвечает только за компиляцию шаблонов.



Однако, когда и особенно когда все наши компоненты представляют собой JSX или однофайловые компоненты, которые скомпилированы заранее, и не требуется динамический шаблон, утилита компилятора будет означать только ненужные накладные расходы в 10–20 КБ. К счастью, мы смогли использовать псевдоним Vue для версии, предназначенной только для времени выполнения:

Обратите внимание, однако, что параметр template в ваших компонентах больше не работает и должен быть изменен на такие вещи, как функция render().

3) Убедитесь, что файлы исходного кода все еще находятся в форме модуля ES при загрузке Babel.

Оба es2015 и env предустановки по умолчанию преобразуют синтаксис модуля ES в формат модуля CommonJS. Убедитесь, что для обеих предустановок установлено "modules": false.

4) Объедините (некоторые из) ваши зависимости в node_modules

То есть, когда некоторые из сторонних зависимостей

  • вносят значительный вклад в размер вашего окончательного пакета, и
  • связаны устаревшими сборщиками, что добавляет много избыточного кода и / или не может встряхнуть дерево

Возможно, стоит попробовать повторно связать их с помощью webpack. Импортируйте несвязанную форму, чтобы проверить, работает ли она. Если нет, прочтите их файл конфигурации browserify / webpack и попробуйте еще раз… пока не добьетесь успеха. Это будет тяжелая работа, но если все будет сделано правильно, это может означать десятки килобайт: в моем собственном проекте я успешно уменьшил размер пакета с ~ 420 КБ до ~ 370 КБ.

5) По возможности загружайте только необходимые части ваших зависимостей

Библиотека случайных компонентов / диаграмм может легко занимать сотни килобайт или даже мегабайт. Однако не все поддерживаемые компоненты или диаграммы действительно нужны приложению. Что еще хуже, их записи по умолчанию не всегда находятся в формате модуля ES, а это означает, что вам нужно вручную включать только необходимые части. Их также сложно найти и правильно включить, но это того стоит.

6) Используйте возможности модуля ES в своем собственном коде

Например, не делайте этого:

Вместо этого сделайте это:

В отличие от поиска в 8-м разделе, имена функций в предыдущем коде (с надписью «плохо») обычно не могут быть сокращены компрессором. А вот имена функций во втором - можно.

7) Используйте краткие названия мутаций / действий

Я бы предложил двухбуквенный префикс для указания, к какому модулю принадлежит мутация или действие в хранилище Vuex, а затем описательное имя из одного или двух слов. Это не только предотвращает случайное использование одного и того же имени мутации в разных модулях, но и помогает уменьшить размер пакета без необходимости думать о том, какое имя обозначает какую мутацию или действие в каком модуле. Однако, когда приложение становится больше и мутации и / или действия должны фиксироваться / отправляться несколько раз, поиск может быть лучше для уменьшения размера пакета (см. Следующий раздел).

По той же причине при использовании модулей CSS с тегами <style module="{moduleName}"> используйте имена модулей с префиксом, чтобы предотвратить случайное столкновение имен с другими свойствами компонента, оставаясь при этом краткими (да, имена модулей CSS являются свойствами компонента во Vue).

8) Используйте поиск

Мутации могут повторяться неоднократно в виде строк, как и действия. Поиск не только уточняет тип мутации, предоставляя поддержку IntelliSense, но также подходит для сжатия.

Похоже, это немного накладные расходы, но факт в том, что его можно было бы хорошо сжать, если бы он никогда не индексировался по строкам.

Однако обратите внимание, что это само по себе не совсем уменьшает размер пакета. И наряду с необходимыми определениями переменных это может фактически увеличить размер пакета в небольших проектах. Но когда вы совершаете мутации много раз, увеличение размера будет компенсировано теми изменениями, которые были сохранены вызовами commit().

И последнее, но не менее важное: правильно настройте свой веб-пакет и проверьте размер пакета до и после любой оптимизации.