Vue通过懒加载提升页面响应速度


Posted in Vue.js onMay 10, 2021

概述

项目的目的是要通过数据透视表和Excel公式来分析公司的各项运营数据。不过在集成后,在开发环境页面运行流畅,大量数据加载处理也很快。但是发布生产后,在用户每次打开页面时,加载时间上相较开发阶段均有所降低,经过排查速度变慢是由于发布包的vendor.js变大所导致的,这个文件加载每次都需300毫秒左右,由于小的Vue项目并没有做模块划分,所以所有的代码都直接打包到了vendor中,在集成了新功能后,发布包也随之变大了。

既然找到了原因,就开始着手优化,在前端对于需加载较大资源时,一般都采用懒加载的方式来优化效率。

什么是懒加载?

懒加载也叫做延时加载,在网页响应时不立刻请求资源,待页面加载完毕或者按需响应时再加载资源,以达到提高页面响应速度以及节省服务器资源的谜底。网页中常用的懒加载是图片的懒加载,对于类似淘宝一样的多图页面,如果等待所有图片都下载完成再响应用不必然造成页面加载的卡顿。对于JS资源的加载也是同样的道理,大JS的加载会造成JS阻塞,页面出现停止响应的假死状态。因此可以通过按需加载的方式,提高页面首屏的加载速度。

总结了具体优化步骤,下面我们就开始着手优化吧!

开始优化

首先是项目环境:Vue 2.6

开发环境:Vue-cli 4.5 + TypeScript 3.9

划分业务模块

通过路由异步加载模块,加速首屏以及其他页面加载速度,在Vue Router中将webExcel模块配置为懒加载模式,配置后webExcel组件会按照指定的webpackChunkName打包为单独的文件,并在访问webExcel路由的时候才会加载。这样访问home以及about页面时并不会加载webExcel资源。

Vue通过懒加载提升页面响应速度

懒加载路由配置

打包发布访问页面,首屏秒开,直接访问about依旧秒开。可是查看网络请求时候发现访问首页时请求了about和web Excel的资源。经过排查发现vue-cli在页面中使用了preload和prefetch预加载机制,在不影响当前页面加载的情况下预加载后续页面需要的资源提升用户体验,这里为了演示清晰注释掉prefetch的资源。

Vue通过懒加载提升页面响应速度

(临时禁用prefetch预加载)

开启路由懒加载后首页并未加载about和webExcel。

Vue通过懒加载提升页面响应速度

(首页Home网络请求)

清理网络请求记录,点击Web Excel,访问webExcel页面,此时会请求webExcel资源并展示组件。

Vue通过懒加载提升页面响应速度

(webExcel页面网络请求)

在线Excel组件懒加载

进一步优化使用插件页面打开速度

优化了路由加载,为了提升用户体验,进一步优化webExcel页面,开启组件懒加载,当需要Designer组件的时候再加载。

开启异步组件的方式类似于路由,直接配置import组件即可,替换原有的静态import。

Vue通过懒加载提升页面响应速度

(组件懒加载)

这里我们一步到位使用AsyncComponent配置,这样在加载组件(loading)时候可以给用户一个提示。

Vue通过懒加载提升页面响应速度

(页面模板)

Vue通过懒加载提升页面响应速度

(异步组件懒加载)

页面上通过displayDesigner属性控制Designer组件是否显示,setTimeout 3秒后开始加载Designer组件并展示。LoadingComponent在加载时展示loading状态。

Vue通过懒加载提升页面响应速度

Vue通过懒加载提升页面响应速度

可以从网络请求中看到,webExcel加载完3秒后开始请求designer资源,请求时显示LoadingComponent,请求完毕展示Desinger 组件。

开启gzip压缩,加速资源请求速度

为了进一步加速资源请求,可以开启服务器gizp压缩,目前大部分浏览器都支持gzip,可以开启服务器的gzip功能,服务器在传输资源之前先进行压缩。

网络请求Request中会出现如下内容,就表示支持gzip

Accept-Encoding: gzip, deflate, br

Vue-cli可以在打包时就将资源提前进行gzip打包,这样服务器直接返回打包后的资源不需要再次打包了。通过使用compression-webpack-plugin插件可以在打包时直接生成gz压缩文件。关于gzip的配置可以根据具体部署情况设置。

总结

经过以上优化,首屏加载资源仅需Vue基础组件和Home页面组件,首屏加载速度回复到原始200毫秒。其他未使用Designer组件的页面也无需加载资源,同时Designer组件加载一次,后续其他页面再使用组件也无需再次加载

以上就是关于Vue路由和组件懒加载的一些配置,不过懒加载不是万能的,还是要从实际需求出发决定是否使用。

以上就是Vue通过懒加载提升页面响应速度的详细内容,更多关于Vue懒加载提升响应速度的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue element实现表格合并行数据
Nov 30 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
如何使用vue3打造一个物料库
vue完美实现el-table列宽自适应
关于Vue Router的10条高级技巧总结
May 06 #Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 #Vue.js
You might like
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python内置函数OCT详解
2016/11/09 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
python中defaultdict的用法详解
2017/06/07 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
程序员岗位职责
2013/11/11 职场文书
监督检查工作方案
2014/05/28 职场文书
文明工地标语
2014/06/16 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
三孔导游词
2015/02/05 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
老兵退伍感言
2015/08/03 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android