浅谈vue加载优化策略


Posted in Javascript onMarch 19, 2019

vue.js是一个比较流行的前端框架,与react.js、angular.js相比来说,vue.js入手曲线更加流畅,不管掌握多少都可以快速上手。但是单页面应用也都有其弊病,有时候首屏加载慢的让人捏舌。今天我们以vue cli3.x来说一说如何行之有效的缓解此问题!

方法一 路由懒加载

首屏加载慢的原因无非就是单页面应用需要加载完整个路由表上的页面,而路由懒加载就是来解决这个问题的。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。下面这个就是vue路由懒加载的一个具体例子。方法很简单,如果您不想深入了解,只需按照这个格式引入路由就可以了。如果您对路由懒加载感兴趣,请移步vue-router路由懒加载

浅谈vue加载优化策略

方法二 组件按需加载

为什么要按需加载组件呢?原因也很简单,一些组件库包含丰富的组件,如果我们直接将其引入,不免会引入一些我们压根用不到的组件。这样打包起来体积会比较大,同样显得我们很不专业。因此按需引入就显得很必要了。我们现在就拿iview组件库为例,了解一下按需引入的流程。

1.首先引入按需加载工具 babel-plugin-import

babel-plugin-import是babel它会在编译过程中将 import 的写法自动转换为按需引入的方式。

npm install babel-plugin-import --save-dev

2.在项目根目录创建.babelrc文件并配置按需加载内容

{
 "plugins": [["import", {
  "libraryName": "iview",
  "libraryDirectory": "src/components"
 }]]
}

3.在main.js配置项目需要加载的组件

下面是iview的一个例子

浅谈vue加载优化策略

这里需要注意全局注册的组件需要挂在到vue原型上,例如我们需要使用Notice组件,那我就需要

Vue.prototype.$Notice = Notice;

这样我们就可以正常的使用iview的组件了。

方法三 使用CDN加速策略

在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,那么vendor.js文件体积将会相当的大,影响首开的体验。解决方法是,将引用的外部js、css文件剥离开来,不编译到vendor.js中,而是用资源的形式引用,这样浏览器可以使用多个线程异步将vendor.js、外部的js等加载下来,达到加速首开的目的。外部的库文件,就可以使用CDN资源。vue cli3.x在配置cdn是和vue cli2.x有一些区别,vue cli在升级后,代码结构变化比较大,配置文件集成到了vue.config.js文件中。下面以amap、axios和qs为例讲述如何使用cdn加载资源。

1.在index.html中引入相关cdn资源

浅谈vue加载优化策略

2.配置externals

vue cli3.x 配置webpack是在vue.config.js的configureWebpack中

浅谈vue加载优化策略

配置完之后,我们就可以正常使用全局的Amap、axios和Qs了

方法四 使用compression-webpack-plugin将文件打包成gzip格式

compression-webpack-plugin这个依赖在npm run build是会生成.gz文件。之后项目访问的文件就是这个.gz文件,正常的项目打包体积会减少一半还要多,是不是很吊

浅谈vue加载优化策略

下面我们来进一步讲述这个这个依赖的使用流程。

1.npm 引入

npm install compression-webpack-plugin --save-dev

2.vue cli3.x在 vue.config.js配置webpack

浅谈vue加载优化策略

3.nginx开启gzip模式

在上一步前端就已经配置好了,之后就是nginx配合开启gzip模式,这个比较简单,只要你对nginx有一点了解,我们在nginx.conf中的http中配置一些代码

浅谈vue加载优化策略

4.验证是否配置成功

这步就很简单了只需要查看chunk类文件的Response Headers的Content-Encoding是否是gzip即可

浅谈vue加载优化策略

以上就是解决vue首屏加载慢的一些方法,希望文章能帮助大家解决问题谢谢。也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
js或jquery实现页面打印可局部打印
Mar 27 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
May 25 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
详解Angular 4 表单快速入门
Jun 05 Javascript
Vue.js 表单控件操作小结
Mar 29 Javascript
webuploader实现上传图片到服务器功能
Aug 16 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
Mar 19 #Javascript
详解js加减乘除精确计算
Mar 19 #Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
Mar 19 #jQuery
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 #Javascript
vue多层嵌套路由实例分析
Mar 19 #Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
Mar 19 #Javascript
vue项目移动端实现ip输入框问题
Mar 19 #Javascript
You might like
Content-type 的说明
2006/10/09 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
php常用的工具开发整理
2019/09/26 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
浅析vue数据绑定
2017/01/17 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
在python 中实现运行多条shell命令
2019/01/07 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
银行委托书范本
2014/09/28 职场文书
2014年路政工作总结
2014/12/10 职场文书