Vue-Cli项目优化操作的实现


Posted in Javascript onOctober 27, 2019

起源

由Vue-Cli(2.X)生成的Vue项目中存在着首屏加载过慢,编译资源过大等问题,主要针对这些问题对项目进行相应的优化,提升项目响应速度,优化项目性能。

操作

路由懒加载

在Vue-router官方文档中有针对懒加载的介绍,主要是将整个大的js进行切片,对当前路由的资源进行一个按需加载。在Vue-cli生成的路由组件引用方法是这样的

import HelloWorld from '@/components/HelloWorld'

只需将组件的引用方式改为

const HelloWorld = () =>
  import ('@/components/HelloWorld')

然后重新编译即可

开启预加载/优先加载

使用webpack插件 PreloadWebpackPlugin 进行预加载prefetch和优先加载preload。 主要做的是用preload加载vendor、manifest与app三个js而用prefetch去加载所有路由对应的文件。 首先要 安装插件

npm install --save preload-webpack-plugin

在 webpack.prod.conf.js 中修改,加入预加载的代码 (注意放在 new HtmlWebpackPlugin() 的下面)

new PreloadWebpackPlugin({
 rel: 'prefetch',
}),
new PreloadWebpackPlugin({
 rel: 'preload',
 as(entry) {
  if (/\.css$/.test(entry)) return 'style'
  return 'script';
 },
 include: ['app', 'vendor', 'manifest']
})

开启GZip

gzip,使用gzip压缩资源可以更快地加载资源。客户端http请求头声明浏览器支持的压缩方式,服务端配置启用压缩,压缩的文件类型,压缩方式。当客户端请求到服务端的时候,服务器解析请求头,如果客户端支持gzip压缩,响应时对请求的资源进行压缩并返回给客户端,浏览器按照自己的方式解析,在http响应头,我们可以看到 content-encoding:gzip ,这是指服务端使用了gzip的压缩方式。

启用gzip,在nginx的site-conf中开启gzip

server {
  gzip on;
  gzip_types    text/xml text/css text/plain text/javascript application/javascript application/x-javascript;
}

webpack处理,需要先安装插件

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

然后在config的index.js中 ,将productionGzip改为true,开启Gzip压缩。

PS:如果编译报错,则安装 compression-webpack-plugin@1.1.12 版本

对第三方工具库进行额外处理

本项目中Vender中主要是Vue,Vue-router,axios等固定依赖的代码,工具库的代码一般不会改动,所以可以将这些工具库的代码抽出来,单独走CDN加载以减少编译JS文件的大小。 具体操作 : 选择相应的工具库版本的cdn,加入到index.html中

<script src="//cdn.bootcss.com/vue/2.2.5/vue.min.js"></script>
<script src="//cdn.bootcss.com/vue-router/2.3.0/vue-router.min.js"></script>
<script src="//cdn.bootcss.com/vuex/2.2.1/vuex.min.js"></script>
<script src="//cdn.bootcss.com/axios/0.15.3/axios.min.js"></script>

之后去到webpack中修改相应的打包配置

externals: {
 'vue': 'Vue',
 'vue-router': 'VueRouter',
 'vuex': 'Vuex',
 'axios': 'axios'
}

ps:倘若main.js中有关于公共库的引用 请记得清除掉 这时再去编译 打包 就会发现编译的Vender.js小了很多

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
25个优雅的jQuery Tooltip插件推荐
May 25 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
使用JSLint提高JS代码质量方法分享
Dec 16 Javascript
一个JavaScript的求爱小特效
May 09 Javascript
跟我学习javascript的this关键字
May 28 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
Dec 08 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
Jun 23 Javascript
webpack4之SplitChunksPlugin使用指南
Jun 12 Javascript
js 解析 JSON 数据简单示例
Apr 21 Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 Javascript
js在HTML的三种引用方式详解
Aug 29 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
Oct 26 #Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 #Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 #Javascript
vue-router的钩子函数用法实例分析
Oct 26 #Javascript
VUE兄弟组件传值操作实例分析
Oct 26 #Javascript
layui实现给某一列加点击事件
Oct 26 #Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 #Javascript
You might like
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
Vue响应式原理详解
2017/04/18 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
详解Require.js与Sea.js的区别
2018/08/05 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
深入理解python try异常处理机制
2016/06/01 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
python 批量修改/替换数据的实例
2018/07/25 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
实体的生命周期
2013/08/31 面试题
财务会计自荐信范文
2014/02/21 职场文书
区级文明单位申报材料
2014/05/15 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL