vue前端性能优化(转载)

vue前端性能优化(转载)

vue前端性能优化(转载) - 时间观测者 - 博客园

一、vue-router路由懒加载
懒加载是当路由被访问的时候才加载对应组件,而不是在首页就全部加载,以此来提高首页反应速度。

方法和原理
require-ensure
说明: require.ensure在需要的时候才下载依赖的模块,当参数指定的模块都下载下来了(下载下来的模块还没执行),便执行参数指定的回调函数。require.ensure会创建一个chunk,且可以指定该chunk的名称,如果这个chunk名已经存在了,则将本次依赖的模块合并到已经存在的chunk中,最后这个chunk在webpack构建的时候会单独生成一个文件。
语法: require.ensure(dependencies: String[], callback: function([require]), [chunkName: String])
dependencies: 依赖的模块数组
callback: 回调函数,该函数调用时会传一个require参数
chunkName: 模块名,用于构建时生成文件时命名使用
注意点:require.ensure的模块只会被下载下来,不会被执行,只有在回调函数使用require(模块名)后,这个模块才会被执行。
示例:

 

二、打包优化——工程文件打包的时候不生成.map文件
npm run build编译之后,我们查看编译生成的文件,发现有很多.map文件,这些文件占了不小的空间。.map文件的作用是帮助编译后的代码调试,但是我们上线的代码已经调试完成,所以上线时可以不生成.map文件。

修改配置文件如下即可:

 

三、切换多入口模式
在vue项目中,我们一般使用vue-cli脚手架搭建单页面的web工程。生成的项目结构如下图所示:

 

main.js是整个单页面应用唯一的入口文件

在大型项目中,单一入口无法满足项目需要,原因有以下两方面:

(1)单一入口无法拆分按模块独立部署,不够灵活

(2)单一入口负载过重,业务模块较多时,点击系统导航菜单频繁切换业务模块,在IE浏览器中,浏览器内存持续上涨,达到 1.5G以上卡顿,浏览器容易崩溃。

基于以上两点原因,大型项目可以采用多入口的模式,好处有以下两点:

(1)满足页面需要分开部署的场景

(2)解决了页面卡顿和内存上涨问题

配置方式参考我的单独讲解多入口配置的博文

四、使用字体图标代替切图
字体图标的优势:

(1)字体图标任意缩放不会失真

(2)在项目中导入后,以css样式引用,相较于传统的图片大大减少请求数量,优化性能

(3)修改方便,如需要切换主题色可由css控制,避免视觉反复切图的工作量

在线生成工具: https://icomoon.io/app/#/select

五、使用雪碧图
雪碧图的优点:

将多张图片合并到一张图片中,可以减小图片的总大小。
将多张图片合并成一张图片后,下载全部所需的资源,只需一次请求。可以减小建立连接的消耗。
六、提取公共样式和方法
1.复用的样式应当提取到公共的样式表中复用

2.公共的方法应当提取到公共的js中复用

3.表单验证的提取

七、控件销毁
1.页面切换释放:

使用的C++控件应当及时销毁

2. $destroy

完全销毁一个实例,清理它与其它实例的连接,解绑它的全部指令及事件监听器。

 

八、定时器销毁
路由离开及时销毁定时器

 

九、解绑事件
路由离开及时解绑事件:

vm.$off()

十、vue中使用keep-alive
vue2.0提供了一个keep-alive组件,用来缓存组件,避免多次加载相应的组件,减少性能消耗,但keep-alive是一把双刃剑,确实需要缓存组件的时候才使用。

<keep-alive>

<component>

<!-- 组件将被缓存 -->

</component>

</keep-alive>

十一、代码层面的优化
1、v-show,v-if 用哪个?

(1)只要涉及到权限相关的展示无疑要用 v-if

(2)在没有权限限制时根据用户点击的频次选择,频繁切换的使用 v-show,不频繁切换的使用 v-if(减少页面中 dom 数量)

2、不要在模板里面写过多的表达式与判断

  v-if="isShow && isAdmin && (a || b)",这种表达式虽说可以识别,但是不是长久之计,当看着不舒服时,适当的写到 methods 和 computed 里面封装成一个方法,这样的好处是方便我们在多处判断相同的表达式,其他权限相同的元素再判断展示的时候调用同一个方法即可。

3、循环调用子组件时添加 key

  key 可以唯一标识一个循环个体,可以使用例如 item.id 作为 key,假如数组数据是这样的 ['a' , 'b', 'c', 'a'],使用 :key="item" 显然没有意义,更好的办法就是在循环的时候 (item, index) in arr,然后 :key="index"来确保key 的唯一性。不设置key值时vue会抛出警告。

4、遵守编码规范

语义化标签,避免乱嵌套,合理命名属性,使用高效简洁的css选择器等等

5、合理利用vue生命周期

减少在created生命周期中做ajax请求,而是放在mounted生命周期中,以不阻塞页面生成dom

十二、iframe的内存释放
相关资料称IE在iframe元素的回收方面存在着bug,需要手动将其释放以避免内存泄漏

释放方法:手动将iframe指向置空


————————————————
版权声明:本文为CSDN博主「小天使娜娜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/localhost_1314/article/details/88848591

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值