在Vue项目中,引进到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开端显现首屏。若是引进的库许多,那么vendor.js文件体积将会相当的M f G ; ! 6 i ^ f大,影响首屏的体会。能够看个例子:
这是优化前的页面加载状况:履行npm run build
打包项目,出来的vendeor.js文件,根本都是1M以上的的巨大文件,没有用户能忍受5s以上的loading而不封闭页面的,如图所示:
我们先来剖析下前端加载速度慢原因
1. 首要装置webpack的可视化资源剖析东西,命令行履行:
npm i webpack-bundle-analyzer -D
2: B [ n Q ( 7 S 4. 然后在webpack的dev开发形式装备中,引进插件,代码如下:
const BundleAnalyzerPlugin = require('webpack-bundle-plugin').BundleAnalyzerPlugin
plugins: [
new BundleAnalyzerPlugin()
]
3. 最后命令行履行npm run build --repon k 3 ` : a W 1rt
, 浏览器会主动翻开剖析结^ ( p 5 M H K果,如下所示:
有针对性的优化计划
一、关于第三方js库e z D的优化K 4 *,别离N d n Q打包
出产环境是内网的话,就把资源放内网,经过静态文件引进,会比node_modules和外网CDN的打包加载快许多。假如( o $ ]有外网的话,能够经过CDN方法引进,因为不必占用拜访外网的带[ ` ( ) l % d宽,不仅能够为您节省a u i F 6 y W u流量,还能经过CDN加速,获得更快的拜访速度。可是要注意下,假如你引用的CDN 资源存在于第三方服务T N h l 5 ? ^ @ C器,在安全性上并不完全可控。
目前选用引进依靠包出产环境的js文件方法加载,直接经过window能够拜访露出出的全局变量,不必经过import引进,Vue.use去注册
在webpack的dev开发装备文件中, 加入如下参数,能够别离打包第三方资源包,ke9 * b x a = O c Vy为依靠包称号,value是源码抛出来的全局变量。如下图所示,能够看到打包后vue相关资源包已经排除在外了。关于一些其他的东西库,尽量选用按需引进的方法。
externaJ h b / I c W Gls: {
vue: 'Vue',
vuex: 'Vuex',
'vue-router': 'VueRouter',
axios: 'axios',
'element-ui': 'ELEMENT'
}
二、vue-roe r % u M H 1uter运用懒加载
在拜访到当前页面才会加载相关的资源,异步方法分模块加载文件,默许的文件名是随机的id。假如在output中装备了chunkf 3 N %Filename,能够在component中添加WebpackChunkName,是为了方便调试,在页面加载时候,会显现加载的对应文件名+hash值,如下图:
{
path: '/Login',
name: 'LO X yogin',
component: () = >import( /* webpackChunkName: "Login" */ '@/view/Logix { # & y tn')
}
三、图片资源的紧缩,icon资源运用雪碧图
四、敞开gizp紧缩
gizp紧缩是一种http恳求优化方法,经过削减文件体积来进步加载速度。html、js、css文件乃至json数u z / 9据都能够用它紧缩,能够减小60%以上的体积。前端装备gzip紧缩,并且l * 6 /服务端运用nginx敞开gzip,用来减小网络传输的流G – K量巨细。
命令行履行:npm i compression-webpack-plugin -D
在weR t d Bbpack的dev开发装备文件中加入如下代码:
const CompressionWebpackPlugin = require('compression-webpack-plugin')
plugins: [
new CompressionWebpackPlugin()
]
启用gzip紧缩打包之后,会变成下面这样,主动生成gz包。目前大部分干流浏览器客户端都是支撑gzip的,就算小部分非干流浏览器不支撑也不必担心,不支撑gzip格式文件的会默许拜访源文件的,所以不要装备清除源文件。
五、webpack相关装备优化
(1= 2 h 9 L @)运用uglifyjs-webpack-= 4 d iplugin插件代替webpack自带UglifyJsPlugin插件来紧缩JS文件;出产环境封闭源码映射,一方面能削减代码* m . d Z包的巨细,另一方面也有利于体系代码安全;清除打印日志o [ 和debugger信息;装备SplitChunks 抽取公l 6 +有代码,提高你的运用的t = { s 6性能
(2)运用mini-xs5 j U g l ls-extract-plugin提取CSS 到独自的文件, 并运用optimize-css-assets-w] x G F . v &ebpack-plu* M I ^gin来紧缩CS} B V ` q dS文件 。
注:具体相关webpack装备请点击juejin.im/post/5d2070…查看第一篇webpack文章,注释很详细哟。
六+ , ,、前端页面代码层面的优化
(1)合理运用v-if和v-show
(2)合理运用watch和computed
(3)运用v-for有必要添加key, 最好为仅有id, 防止运用index, 且在同一个标签上,v-for不要和v-if一起运用
(4)定时器的毁掉。能够在beforeDestroy()生命周期内履行毁掉事情;也能够运用d h Z P ` # A & –$once这个事情侦听器,在界说定时器事情的方位来清除定时器。详细见vue官网
结语:前端性能优化至关重要,以后有遇到更好的其5 O 1 a b 他计划会继续补充进来。你也能够在谈论区留言讨论,有过错不足的当地欢迎大佬指出。