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项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
vue封装数字翻牌器
Apr 20 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
谈谈新手如何学习PHP
2006/12/23 PHP
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
js实现一键复制功能
2017/03/16 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
Python 图片处理库exifread详解
2021/02/25 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
创业计划书撰写原则
2014/01/25 职场文书
刊首寄语大全
2014/04/11 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android