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 相关文章推荐
在textarea中屏蔽js的某个function的javascript代码
Apr 20 Javascript
基于jquery的复制网页内容到WORD的实现代码
Feb 16 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
jQuery数据类型小结(14个)
Jan 08 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
Angular路由ui-router配置详解
Aug 01 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
Aug 15 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
vue结合el-upload实现腾讯云视频上传功能
Jul 01 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
Jul 30 Javascript
vue+elementUI 实现内容区域高度自适应的示例
Sep 26 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 编写的 25个游戏脚本
2009/05/11 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
php文件上传类完整实例
2016/05/14 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
js点击选择文本的方法
2015/02/09 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
js实现抽奖功能
2020/11/24 Javascript
详解Python中的多线程编程
2015/04/09 Python
Python中datetime常用时间处理方法
2015/06/15 Python
python Django批量导入数据
2016/03/25 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
Django实现学员管理系统
2019/02/26 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Python递归实现打印多重列表代码
2020/02/27 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
财务部出纳岗位职责
2013/12/22 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python