Vue项目前端性能优化

Vue项目前端性能优化一 vue router 路由懒加载懒加载是当路由被访问的时候才加载对应组件 而不是在首页就全部加载 以此来提高首页反应速度 方法和原理 require ensure 说明 require ensure 在需要的时候才下载依赖的模块 当参数指定的模块都下载下来了 下载下来的模块还没执行 便执行参数指定的回调函数 require ensure 会创建一个 chunk 且可以指定该 chunk

一、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(模块名)后,这个模块才会被执行。

示例:

Vue项目前端性能优化

二、打包优化——工程文件打包的时候不生成.map文件

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

修改配置文件如下即可:

Vue项目前端性能优化

三、切换多入口模式

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

Vue项目前端性能优化

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

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

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

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

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

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

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

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

四、使用字体图标代替切图

字体图标的优势:

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

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

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

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

五、使用雪碧图

雪碧图的优点:

  1. 将多张图片合并到一张图片中,可以减小图片的总大小。
  2. 将多张图片合并成一张图片后,下载全部所需的资源,只需一次请求。可以减小建立连接的消耗。

六、提取公共样式和方法

     1.复用的样式应当提取到公共的样式表中复用

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

3.表单验证的提取

七、控件销毁

1.页面切换释放:

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

2. $destroy

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

Vue项目前端性能优化

 

八、定时器销毁

路由离开及时销毁定时器

Vue项目前端性能优化

 

九、解绑事件

路由离开及时解绑事件:

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的内存释放

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

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

Vue项目前端性能优化

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231679.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 光棍节程序员闯关秀——闲来无事玩玩儿游戏~

    光棍节程序员闯关秀——闲来无事玩玩儿游戏~告诉我没女朋友的人不学习干嘛???第一次写题解,有点激动哈咳咳~话说为什么“光棍”老得和程序员挂上钩?人家好多程序员有车子有房子有票子有漂亮老婆有可爱的孩子人生早就已经圆满了好吗?!!【正经脸】第一关:(上图后发现右下角神奇的多了一个水印原谅没见过世面的我(ಡωಡ)hiahiahia)话不多说直接查看源码。发现有个颜色被隐藏在背景色中的超链接(忽悠小孩儿呢

    2022年7月16日
    16
  • 快速查看Linux系统版本

    快速查看Linux系统版本终端输入命令:lsb_release-a

    2022年5月5日
    47
  • mysql倒序截取字符串_MySQL数据库之mysql截取字符串与reverse函数

    mysql倒序截取字符串_MySQL数据库之mysql截取字符串与reverse函数本文主要向大家介绍了MySQL数据库之mysql截取字符串与reverse函数,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。这个网页上很多知识点,可以学习下,关于mysql的函数,也可以作为API查询:这里只说下mysql的截取函数和reverse函数:MySQL字符串截取函数:left(),right(),substring(),substring_index()…

    2025年6月16日
    2
  • Burp Collaborator 使用总结

    Burp Collaborator 使用总结0x00 使用原因我们在做渗透测试的时候 经常会遇到这种情况 测试跨站可能有些功能插入恶意脚本后无法立即触发 例如提交反馈表单 需要等管理员打开查看提交信息时才会触发 或者是盲注跨站 盲打 XSS 这种 再例如 SSRF 如果程序不进行回显任何信息 而只提示你输入的是否合法 那么也无法直接判断程序存在 SSRF 漏洞 我们可以叫盲 SSRF 再例如 XXE 引入外部文件时 如果程序也不返回任何

    2025年10月20日
    2
  • 一文搞懂│php 中的 DI 依赖注入「建议收藏」

    一文搞懂│php 中的 DI 依赖注入「建议收藏」学好依赖注入,让编程更简单

    2022年8月16日
    4
  • SQL SERVER 中的smalldatetime和datetime区别「建议收藏」

    SQL SERVER 中的smalldatetime和datetime区别「建议收藏」SQLSERVER中的smalldatetime和datetime区别Postedon 2011-01-0410:43 Rainbow.ding 阅读(2371)评论(0) 编辑 收藏 smalldatetime不能到秒. 不過它占的空間小.(4位) datetime(8位) 而且兩者的時間範圍不一樣.   datetime占8字节,精度3.3

    2022年5月19日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号