В последнее время у меня была головная боль по поводу упаковки проекта Vue.Посмотрев жестко написанный проект, пользовательский опыт его упаковки в Интернете очень плохой, и это действительно смущает. Позже я познакомился с некоторыми методами оптимизации упаковки.Сейчас подведу итоги разработки.Этот стек технологийvue+element-ui+axios+echarts, Использование веб-пакета для упаковки и сборки инструментов является только заметкой об опыте. Если в статье есть какие-либо недостатки, пожалуйста, дайте мне несколько указателей. Я исправлю это как можно скорее, спасибо!
содержание
- Маршруты загружаются асинхронно
- оптимизация компонента элемента
- Оптимизация конфигурации WebPack
- Статистический анализ зависимостей проекта
- Эффект оптимизации
Маршруты загружаются асинхронно
Страница проекта Vue представляет собой виртуальный маршрут, а доступ к содержимому страницы осуществляется по ссылке маршрутизации, настроенной vue-router.Разработка одностраничных приложений SPA подходит для разработки фоновых систем, но не является дружественной для поисковых систем, поскольку в конце генерируется только одна страница.
Поисковая система сканирует содержимое веб-страницы по ссылке на страницу, а затем ищет ее в базе данных поисковой системы, а проект после упаковки Vue имеет только одну страницу, поэтому, конечно, содержимое на ней не может быть включено в поиск. паук двигателя, который является относительно плохим Конечно, оптимизация SEO может быть проведена позже.
Поэтому, когда у вас в проекте много компонентов Vue, оптимизация первого экрана после упаковки является очень важным вопросом, ключевым моментом является повышение производительности и повышение скорости загрузки и открытия.
Ниже я поделюсь методом асинхронной ленивой загрузки роутинга в vue.Рекомендуется, если компонентов не много, этот метод не использовать, что увеличит время и скорость загрузки.Этот метод можно использовать для проектов со многими компонентами.
Импортировано по умолчанию es6
Но в этом методе слишком много компонентов, загрузка будет медленнее, а после упаковкиapp.js
Размер файла станет очень большим, и два наиболее часто используемых файла будут использоваться позже.
import example from '../components/example.vue'
Официальная рекомендация Vue
Используйте импорт, чтобы разделить компоненты на небольшие отдельные файлы, чтобы уменьшить размер файла. WebpackChunkName — это упакованное имя этого компонента/подкомпонента.
const example = () => import(/* webpackChunkName: "group-example" */ '../components/example.vue')
требуемый метод
Ниже приведен мой любимый метод require, который также может делить компоненты на мелкие части.
const example = resolve => require(['../components/example.vue'], resolve);
оптимизация компонента элемента
Поскольку это фоновый проект, для построения фоновой системы выбран фреймворк element-ui, поэтому его оптимизация также может уменьшить объем, повысить скорость и сократить время загрузки, а также улучшить взаимодействие с пользователем.
Третий способ можно использовать для оптимизации этого фреймворка, но я все же предпочитаю этот способ, то есть лучше менять компонент для загрузки по требованию, а не внедрять его глобально.
глобальное использование
- Глобальное введение и использование
import elementUI from 'element-ui'
Vue.use(elementUI)
Для случая, когда используется только небольшое количество компонентов element-ui, многие компоненты являются избыточными, что незаметно увеличит время загрузки и размер упакованного проекта, поэтому следующий метод может быть эффективно решен с использованием введенного метода по запросу.эта проблема.
Ниже приведен демонстрационный код: Обычно формы и таблицы используются чаще.
Внедрить по требованию
// 按需引入
import {
Form,
Button,
Table,
} from 'element-ui'
// 按需使用
Vue.use(Form)
Vue.use(Button)
Vue.use(Table)
Также есть некоторые компоненты для загрузки и подсказок сообщений, которые написаны следующим образом:
// 按需引入
import {
Loading,
Message,
MessageBox,
Notification,
} from 'element-ui'
// 按需使用
Vue.use(Loading.directive)
// 挂载到vue实例上面
Vue.prototype.$loading = Loading.service
Vue.prototype.$msgbox = MessageBox
Vue.prototype.$confirm = MessageBox.confirm
Vue.prototype.$alert = MessageBox.alert
Vue.prototype.$prompt = MessageBox.prompt
Vue.prototype.$message = Message
Vue.prototype.$notify = Notification,
Вы можете использовать компонент уведомления, вы также можете назвать его так,Notification(options)
,илиNotification.success(options)
.
оптимизация конфигурации веб-пакета
Оптимизация размера пакета зависимостей
Как мы все знаем, в ежедневном процессе разработки интерфейс уже начал разработку и компонентную разработку, поэтому неизбежно загружать различные пакеты узлов, что делает упакованный объем очень большим.Ниже приведено внешнее расширение конфигурации с использованием веб-пакета. , Такие проблемы можно решить.
Упражнение по настройке внешних параметров
В официальной документации webpack есть конфигурация для обработки различных пакетов, оптимизированных для зависимостей.[внешнее внешнее расширение].
Как использовать: В этом случае преобладает jQuery.
- Введите cdn, в
index.html
изhead
написано на этикетке.
<script
src="https://code.jquery.com/jquery-3.1.0.js"
integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
crossorigin="anonymous">
</script>
- Измените файл конфигурации веб-пакета
webpack.config.js
Свойство — это имя, которое вы ввели в проект, а значение после него — это имя метода, предоставляемого jQuery.
externals: {
jquery: 'jQuery'
}
- последнее использование
import $ from 'jquery';
$('.my-elem').animate(/*some things*/);
После трех шагов таким образом размер упакованного файла будет сильно уменьшен, один не очень очевиден, но многие пакеты используют этот метод, и эффект более значителен.
Внешняя конфигурация реального боя
- существует
index.html
Внедрение cdn в России, ниже приведены несколько распространенных поставщиков услуг cdn.
Здесь используется отечественный сервис bootcdn, и можно импортировать версию, используемую вашим собственным проектом.
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script src="https://cdn.bootcss.com/vue-router/3.0.7/vue-router.min.js"></script>
<script src="https://cdn.bootcss.com/vuex/3.1.1/vuex.min.js"></script>
<script src="https://cdn.bootcss.com/axios/0.19.0/axios.min.js"></script>
<script src="https://cdn.bootcss.com/element-ui/2.10.1/index.js"></script>
- в конфигурационном файле вебпака
webpack.base.conf.js
серединаentryДобавьте следующий абзац после атрибута:
Точно так же свойство — это имя метода, предоставляемого пакетом, а значение после него — это имя, которое вы используете в своем проекте.
externals: {
'vue': 'Vue',
'vue-router': 'VueRouter',
'vuex': 'Vuex',
'element-ui': 'elementUI',
'axios': 'axios',
}
После настоящей битвы я обнаружил, что у вышеуказанного метода настройки есть проблема с записью, поэтому я заменил его, и все было сделано.
Сжатие Gzip и оптимизация sourceMap
Это также метод сжатия файлов, для nginx онлайн-сервера лучше также включить функцию gzip, отмена карты ресурсов может эффективно защитить исходный код.
В файле сборки веб-пакета включите сжатие Gzip и отключите карты ресурсов.
module.exports = {
// ...
build: {
productionSourceMap: false,
productionGzip: true,
}
}
Таким образом, файлов sourceMap после упаковки больше не будет, а будет еще несколько.js.gz
расширение файла.
Статистический анализ зависимостей проекта
Наконец, я представлю некоторые пакеты анализа пакетов зависимостей, используемые в ежедневном процессе разработки.После открытия вы можете визуально наблюдать объем каждого пакета и помочь вам организовать и проанализировать структуру каждого пакета.
конфигурация веб-пакета
- Скачать пакеты зависимостей
npm i -D webpack-bundle-size-analyzer
- импорт конфигурации
Два способа представить
// commondjs方法
var WebpackBundleSizeAnalyzerPlugin = require('webpack-bundle-size-analyzer').WebpackBundleSizeAnalyzerPlugin;
// es6方法
import { WebpackBundleSizeAnalyzerPlugin } from 'webpack-bundle-size-analyzer';
Добавьте в раздел plugin файла конфигурации webpack:
module.exports = {
// ...
plugins: [
new WebpackBundleSizeAnalyzerPlugin('./reports/plain-report.txt')
]
// ...
}
Использование приведенной выше конфигурации приводит к следующему:
<webpack-output-path>/reports/plain-report.txt
:
marked: 27.53 KB (14.9%)
lru-cache: 6.29 KB (3.40%)
style-loader: 717 B (0.379%)
<self>: 150.33 KB (81.3%)
конфигурация скаффолдинга vue-cli
Поскольку vue-cli интегрировал этот плагин, его можно использовать, загрузив плагин и, наконец, выполнив командуnpm run build --report
Его можно посмотреть после упаковки, и он автоматически отобразится вhttp://localhost:8888
Открыть.
Эффект оптимизации
Наконец, взгляните на оптимизированный эффект:
Сравнение времени упаковки
Перед упаковкой:
После упаковки:
Сравнение объема упаковки
Перед упаковкой:
После упаковки:
Сравнение скорости открытия веб-страниц
Перед упаковкой:
После упаковки:
Диаграмма анализа пакета зависимостей
Перед упаковкой:
После упаковки:
напиши в конце
Упомянутые на этот раз сводные методы проекта vue - это лишь некоторые из методов оптимизации. С изменением бизнес-сценариев возникнут другие проблемы. Считается, что существуют другие методы, которые не были обнаружены и использованы. Оптимизация проекта имеет долгий путь и долгий путь. Путь, который я пройду, я буду продолжать оптимизировать молча.