最近做的一个vue项目,首屏加载实在是慢的厉害,就给它做了个优化,特此记录一下自己的成长。 由于这个项目是ant-design-vue-pro做的框架,直接使用,所以会有很多的不必要的引入,会导致打包完之后vendor.js特别大,从而导致首屏加载的速度变慢。所以总结一下vue项目的优化以及首屏加载速度的优化。 一、编码阶段: 1、尽量减少data中的数据,data中的数据会增加getter和setter,会收集对应的watcher 2、v-if和v-for不能连用,且为item添加唯一值key,方便精准找到该条列表数据; 3、在使用v-for给每项元素绑定事件时,使用事件代理; 4、SPA使用keep-alive缓存组件; 5、路由懒加载异步加载组件; 6、第三方模块按需导入; 7、长列表分页加载或滚动到可视区加载; 8、图片懒加载; 9、computed和watch区分使用场景: computed计算属性的值是有缓存的,只有他依赖的属性值发生变化时才会重新计算computed的值 watch类似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调进行后续操作; 10、服务端渲染ssr或者预渲染。 二、webpack层面的优化 1、分析打包后的哪些文件比较大,找出原因,然后压缩。使用webpack-bundle-analyzer插件帮助分析文件,它会生成一个HTML页面来帮助查看分析文件。
首先安装插件,`yarn add webpack-bundle-analyzer -save-dev` 在vue.config.js中引入配置, const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;配置
configureWebpack: { // webpack plugins plugins: [ new BundleAnalyzerPlugin({ analyzerPort: 9999, openAnalyzer: false }), ], //analyzerPort:9999 配置打开的HTML的端口号,端口号被占用时使用。默认为8888 //openAnalyzer:false 配置是否自动打开html页面,默认为true }2、echarts按需加载: 引入插件babel-plugin-equire,配合实现echarts按需加载。 下载插件
yarn add babel-plugin-equire -D在.babel.config.js中配置
plugins.push(["equire"]);创建echarts.js 文件,用来按需引入echarts;
// eslint-disable-next-line const echarts = equire([ // 写上你需要的 "bar", "legend", "graphic", "title", "color", "tooltip", "line", "pie" ]); export default echarts;3、配置打包压缩文件插件,将文件打包成gizp文件。 下载compression-webpack-plugin插件 yarn add compression-webpack-plugin --save-dev vue.config.js里配置
const CompressionWebpackPlugin = require("compression-webpack-plugin"); const productionGzipExtensions = ["js", "css"]; ... 其他配置 ... plugins: [ new CompressionWebpackPlugin({ algorithm: "gzip", test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"), threshold: 10240, minRatio: 0.8 }) ],在nginx中配置是否解析gzip文件:
http { //在 http中配置如下代码, gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 8; #压缩级别 gzip_buffers 16 8k; #gzip_http_version 1.1; gzip_min_length 100; #不压缩临界值 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; }经过一番折腾,项目加载从刚开始5s左右,目前只需2s。 有用的知识又增加了!哈哈