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 相关文章推荐
js 获取浏览器版本以此来调整CSS的样式
Jun 03 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
AngularJS 表达式详解及实例代码
Sep 14 Javascript
JS高级运动实例分析
Dec 20 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 Javascript
js拖动滑块和点击水波纹效果实例代码
Oct 16 Javascript
如何实现一个webpack模块解析器
Oct 24 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
Apr 22 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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不用正则采集速度探究总结
2008/03/24 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
python正则-re的用法详解
2019/07/28 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
pycharm显示远程图片的实现
2019/11/04 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Django websocket原理及功能实现代码
2020/11/14 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
法定代表人授权委托书范文
2014/08/02 职场文书
2014年组织部工作总结
2014/11/14 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书