前言
你们好啊,我是wangly19,一名前端摸鱼小能手。最近忙着开源项目的东西,还有公司项目的迭代问题,致使更新文章的频率有点低了。也来聊聊我在干吗吧。html
第一个事情就是比较个人阉割版UI Design,要开始Vue3.0的开发工做,因此近期都在看Vue3.0的东西。 其次就是和UI配套的方法库,也是我近期的一个项目,是一个Typescript生产的小东西。但愿可以对于你们有一些帮助。前端
eleganceUI框架:Github仓库vue
这篇文章呢,主要是作一个Vue性能优化的帖子,作一个参考文档,对之后项目上线作一些集合文档。若是对各位在项目优化时,作一个文档参照。node
开发过程
在开发项目的时候,就要注意项目的一些小技巧,下面我就罗列一些常常用到的优化的方法吧。同时老规矩,查缺补漏。webpack
优先使用vIf
vIf
和 vShow
理论上都是做用于元素的显示隐藏,只是一个是直接对DOM,一个是经过CSS的 display
来操做的,在项目中大部分的时候我都是直接使用 vIf
直接代替使用 vShow
,只有当DOM频繁进行显示和隐藏的时候,可是这种场景很是少见,我只在信息推送优先级中使用过,项目中一直经过 WebSocket
推的消息进行消息的场景遇到过,频繁推送不一样类型的通知。ios
vFor和vIf不要一块儿使用
一、vFor
的优先级实际上是比 vIF
高的,因此当两个指令出现来一个DOM中,那么 vFor
渲染的当前列表,每一次都须要进行一次 vIf
的判断。而相应的列表也会从新变化,这个看起来是很是不合理的。所以当你须要进行同步指令的时候。尽可能使用计算属性,先将 vIf
不须要的值先过滤掉。他看起像是下面这样的。
二、前端技术是不断更新的。顺便给你们点福利吧,送大家2020最新企业级别Vue3.0/Js/ES6/TS/React/node等实战视频教程,想学的可进裙 519293536 免费获取,小白勿进哦!git
// 计算属性 computed: { filterList: function () { return this.showData.filter(function (data) { return data.isShow }) } // DOM <ul> <li v-for="item in filterList" :key="item.id"> {{ item.name }} </li> </ul> 复制代码

vFor key避免使用index做为标识
其实你们都知道 vFor
是不推荐使用 index
下标来做为 key
的值,这是一个很是好理解的知识点,能够从图中看到,当index做为标识的时候,插入一条数据的时候,列表中它后面的key都发生了变化,那么当前的 vFor
都会对key变化的 Element
从新渲染,可是其实它们除了插入的 Element
数据都没有发生改变,这就致使了没有必要的开销。因此,尽可能不要用index做为标识,而去采用数据中的惟一值,如 id
等字段。github

释放组件资源
什么是资源? 每建立出一个事物都须要消耗资源,资源不是凭空产生的,是分配出来的。因此说,当组件销毁后,尽可能把咱们开辟出来的资源块给销毁掉,好比 setInterval , addEventListener等,若是你不去手动给释放掉,那么它们依旧会占用一部分资源。这就致使了没有必要的资源浪费。多来几回后,能够想象下资源占用率确定是上升的。web
添加的事件后端
created() {
addEventListener('click', Function, false) }, beforeDestroy() { removeEventListener('click', Function false) } 复制代码
定时器
created() {
this.currentInterVal = setInterval(code,millisec,lang) }, beforeDestroy() { clearInterval(this.currentInterVal) } 复制代码
长列表
项目当中,会涉及到很是多的长列表场景,区别于普通的分页来讲,大部分的前端在作这种 无限列表
的时候,大部分新手前端都是经过一个 vFor
将数据遍历出来,想的多一点的就是作一个分页。滚动到底部的时候就继续请求 API
。其实这也是未思考稳当的。随着数据的加载,DOM会愈来愈多,这样就致使了性能开销的问题产生了,当页面上的DOM太多的时候,不免给个人客户端形成必定的压力,因此对于长列表渲染的时候,建议将DOM移除掉,相似于图片懒加载的模式,只有出如今视图上的DOM才是重要的DOM。网络上有一些很好的解决方案,如 vue-virtual-scroller
库等等,你们能够理性的选择。
图片合理的优化方式
图片应该都不陌生吧,在网页中,每每存在大量的图片资源,这些资源或大或小。当咱们页面中DOM中存在大量的图片时,不免不会碰到一些加载缓慢的问题,致使图片出现加载失败的问题。网络上大部分都在使用 懒加载
的使用方式,只有当 存在图片的DOM
出如今页面上才会进行图片的加载,无形中起到了分流的做用,下面就说一套实践的方案吧
- 小图标使用
SVG
或者字体图标 - 经过
base64
和webp
的方式加载小型图片 - 能经过cdn加速的大图尽可能用cdn
- 大部分框架都带有懒加载的图片,不要嫌麻烦,多花点时间使用它
路由器按需加载
对于路由的懒加载,若是还不会的话,那么就真该好好的从新去学习一下了。路由懒加载的方式有两种,一种是require
另外一种是 import
。当路由按需加载后,那么Vue服务在第一次加载时的压力就可以相应的小一些,不会出现 超长白屏P0问题
。下面是两种路由懒加载的写法:
// require法 component: resolve=>(require(['@/components/HelloWorld'],resolve)) // import component: () => import('@/components/HelloWorld') 复制代码
UI框架使用方式
确保在使用UI框架如, Element
, And Design
等UI框架的时候,都使用官方给暴露出来的按需加载组件。只有真正用到它的时候时候才会加载当前UI框架的组件,而不是一开始就将整个组件库给加载出来,咱们都知道,一个UI框架其实很大,相对比其余的东西来讲。所以,它在方便咱们开发者的同时,也无形中产生了多余的开销。可是项目周期开发的时候,不得不依赖它。因此建议尽可能的使用按需加载。合理的对项目进行止损,若是你不在乎,很是嫌麻烦,那么能够进行全局引入。
import { Button } from 'xxxx 复制代码
首屏优化
众所周知,第一次打开Vue的时候,若是你的项目够大,那么首次加载资源时,会很是的久。因为资源没有加载完毕,界面的DOM也不会渲染,会形成白屏的问题。用户此时并不知道是加载的问题,因此会带来一个很差的体验。所以一般会在public下写一个加载动画,告诉用户,网页在加载中这个提示。当页面加载成功后,页面渲染出来的这一个体验比白屏等开机要好太多了。所以,推荐你们都设计一个自家公司的loading加载方式放入index.html中吧。
项目过程
最小化JS文件
能够经过webpack处理打包的JavaScript文件,让其更加的精简。在配置中,你能够这么作
config.optimization.minimize(true); 复制代码
图片资源压缩
能够经过 image-webpack-loader
插件对打包的图片进行压缩,看起来会对图片的加载有一些提高。若是担忧破坏图片,能够放弃使用它。
“$ yarn add image-webpack-loader
- - QAQ
config.module
.rule('images') .use('image-webpack-loader') .loader('image-webpack-loader') .options({ bypassOnDebug: true }) .end() 复制代码
打包公共代码
在 webpack4
中,能够经过 optimization.minimize
将公共代码进行打包,虽然我我的认为这个东西对SPA应用来讲,效果其实有限,但有胜于无,文字再小也是肉不是,因此说,在细节的把控上,永远是无止境的。可是在webpack4中也是将CommonsChunkPlugin 改用 SplitChunksPlugin 了。感受评论掘友的提醒。
new webpack.optimize.CommonsChunkPlugin({ name: ['vendor','runtime'], filename: '[xxxxx].js' }) 复制代码
删除沉淀代码
使用 Tree-Shaking
插件能够将一些无用的沉淀泥沙代码给清理掉。
依赖库CDN加速
看到有小伙伴使用CDN的方式引入一些依赖包,以为很是的 Nice
,而后我也开始使用了。我将 Vue
Axios
Echarts
等等都分离了出来,在正式环境下,经过CDN,确实有了一些明显的提高,因此说你们能够进行尝试。
CDN LinkDI地址:BootCDN
// 在html引入script标签后。在vue的配置中,进行声明 configureWebpack: { externals: { 'echarts': 'echarts' // 配置使用CDN } } 复制代码
GZIP
这个东西须要后端进行配置,固然,若是你有操做 Nginx
的权限的话,那么能够本身开启,反正我认为,这个东西提高仍是很大的。具体的能够看这篇文章。这里不过多赘述这个东西。 Vue CLI 2&3 下的项目优化实践 —— CDN + Gzip + Prerender
后话
项目优化是很是重要的,一丝一毫的提高都是对用户的负责。另外前端技术是不断更新的。顺便给你们点福利吧,送大家2020最新企业级别Vue3.0/Js/ES6/TS/React/node等实战视频教程,想学的可进裙 519293536 免费获取,小白勿进哦!
本文的文字及图片来源于网络加上本身的想法,仅供学习、交流使用,不具备任何商业用途,版权归原做者全部,若有问题请及时联系咱们以做处理