задний план
Для разработчиков программ при разработке проекта важны не только эффективность и функциональность, но и вопросы производительности внешнего интерфейса. Это напрямую влияет на пользовательский опыт, что косвенно отражает качество проекта. Существует множество причин, влияющих на производительность проекта, таких как: размер файла ресурсов, сложность бизнеса и т. д., поэтому существует множество способов оптимизации фронтенда. Они фрагментарны и легко забываются. Поэтому в этой статье суммированы методы оптимизации, которые я обычно использую.Это может быть не слишком исчерпывающе.Если у вас есть другие методы оптимизации, вы можете оставить сообщение и пообщаться друг с другом. Не говори, просто напиши. .
Оптимизация 1: отложенная загрузка маршрутизации vue-router
懒加载:
Его еще называют ленивой загрузкой, то есть он загружается тогда, когда это нужно, и загружается по мере необходимости.
Причины использования ленивой загрузки:vue
представляет собой одностраничное приложение, использующееwebpcak
Упакованный файл очень большой, что приведет к загрузке слишком большого количества ресурсов при входе на домашнюю страницу, и на странице появится белый экран, что не способствует работе пользователя. После использования отложенной загрузки страницы можно загружать по запросу, чтобы улучшить взаимодействие с пользователем.
Ленивый метод загрузки:
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router({
mode: 'history',
routes: [
{
path: '/',
component: resolve => require(['@/components/DefaultIndex'],resolve),
children: [
{
path: '',
component: resolve => require(['@/components/Index'],resolve)
},
{
path: '*',
redirect: '/Index'
}
]
})
Конфигурация маршрутизации без ленивой загрузки:
import Vue from 'vue'
import Router from 'vue-router'
import DefaultIndex from '@/components/DefaultIndex'
import Index from '@/components/Index'
Vue.use(Router)
export default new Router({
mode: 'history',
routes: [
{
path: '/',
component: 'DefaultIndex ',
children: [
{
path: '',
component: 'Index'
},
{
path: '*',
redirect: '/Index'
}
]
})
Оптимизация 2: веб-пакет сжимает изображения (уменьшает размер изображения)
Обычно вvue
используется в проектеwebpack
При упаковке, согласноwebpack.base.conf.js
серединаurl-loader
установить вlimit
размер для обработки изображений, для изображений меньше, чемlimit
изображения преобразуются вbase64
формате, остальные не работают. Таким образом, для некоторых больших ресурсов изображений при запросе ресурсов загрузка будет очень медленной, вы можете использоватьimage-webpack-loader
для сжатия изображения.
Установить:
npm install image-webpack-loader --save-dev
Конфигурация:
существуетwebpack.base.conf.js
Конфигурация представлена в файле (для сборки этого проекта я использовал строительные леса, поэтомуwebpack.base.conf.js
)
1: 引入:
require("image-webpack-loader")
2:配置:
module: {
rules: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
loader: 'image-webpack-loader',
options: {
bypassOnDebug: true,
}
}
},
或者也可配置为:
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use:[
{
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
loader: 'image-webpack-loader',
options: {
bypassOnDebug: true,
}
}
]
}
Оптимизация третья: js после того, как пакет слишком большой, в пакете несколько файлов js
из-заwebpack
упакованныйjs
Настолько большой, что загрузка ресурса занимает слишком много времени. Поэтому упакуйте файл в несколькоjs
файлы, которые загружаются по запросу, когда это необходимо.
Оптимизация:
entry:{
main:'xxx.js'
}
plugins:{
new commonsChunkPlugin({
name:'commons',
minChunks:function(module){
// 下边return参考的vue-cli配置
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}) ,
// 以下才是关键
new commonsChunkPlugin({
name:'charts',
chunks:['commons']
minChunks:function(module){
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0 && ['jquery.js', 'highcharts.js','echarts'].indexOf( module.resource.substr(module.resource.lastIndexOf('/')+1).toLowerCase() ) != -1
)
}
})
}
Оптимизация 4: удалить ненужные плагины
1: При упаковке некоторые ненужные плагины могут быть удалены, чтобы предотвратить упаковку некоторых бесполезных ресурсов, в результате чего упакованные файлы слишком велики и влияют на производительность.
2: При внедрении стороннего плагина, если плагин слишком велик, вы можете ввести его по требованию, напримерelement-ui
.
3: использоватьwebpack.optimize.UglifyJsPlugin
Обфускация сжатия плагинаjsкод, метод использования следующий:
plugins: [//webpack.config.jsnew webpack.optimize.UglifyJsPlugin({ warnings: false,
compress: {
join_vars: true,
warnings: false,
},
toplevel: false,
ie8: false,
]
Оптимизация пятая: сжатие gzip
Для интерфейсных веб-проектов статические ресурсы размещаются вcdn
ещеgzip
Компрессия очень нужна, она напрямую изменяетjs
Размер файла уменьшается в два-три раза.
Ссылаться наУскоряем nginx: включаем gzip и кеширование,nginx
изgzip
Конфигурация очень проста, под соответствующим доменным именем добавьте следующую конфигурацию и перезапустите службу.gzip_comp_level
значение больше, чем2
не очевидно, рекомендуется установить1或者2
между.
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
Я никогда не использовал этот метод, если вы использовали его, вы можете оставить сообщение и общаться.
Оптимизация шестая: кэш сервера
Чтобы повысить скорость получения сервером данных,nginx
Очень необходимо кэшировать статические ресурсы. Если это тестовая пара серверовhtml
не следует устанавливать кеш, иjs
Дождитесь среды статических ресурсов, поскольку она будет добавлена в конец файла.hash
значение, которое может эффективно реализовать управление кешем.
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
access_log off;
expires 30d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
access_log off;
expires 24h;
}
location ~* ^.+\.(html|htm)$ {
expires 1h;
}