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 相关文章推荐
addRule在firefox下的兼容写法
Nov 30 Javascript
指定js可访问其它域名的cookie的方法
Sep 18 Javascript
alert中断settimeout计时功能
Jul 26 Javascript
transport.js和jquery冲突问题的解决方法
Feb 10 Javascript
JavaScript中的闭包介绍
Mar 15 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 Javascript
vue+vuex+axios实现登录、注册页权限拦截
Mar 09 Javascript
JS代码触发事件代码实例
Jan 02 Javascript
JavaScript实现移动端弹窗后禁止滚动
May 25 Javascript
解决vue无法侦听数组及对象属性的变化问题
Jul 17 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python制作数据导入导出工具
2015/07/31 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python与C互相调用的方法详解
2017/07/14 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
用python实现百度翻译的示例代码
2018/03/09 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
python 字符串常用方法汇总详解
2019/09/16 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
python3实现简单飞机大战
2020/11/29 Python
银行个人求职自荐信范文
2013/12/16 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
个人借款协议书范本
2014/11/17 职场文书
原告代理词范文
2015/05/25 职场文书
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers