vue-cli项目优化方法- 缩短首屏加载时间


Posted in Javascript onApril 01, 2018

最近实习的项目需求上要求不多,就学了下项目优化,主要是首屏加载太慢。

大文件定位

我们可以使用webpack可视化插件Webpack Bundle Analyzer 查看工程js文件大小,然后有目的的解决过大的js文件。

安装

npm install --save-dev webpack-bundle-analyzer

在webpack中设置如下,然后npm run dev 的时候默认会在8888端口显示。

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
 plugins: [
  new BundleAnalyzerPlugin()
 ]
}

JS文件按需加载

如果没有这个设置,项目首屏加载时会加载整个网站所有的JS文件,所以将JS文件拆开,点击某个页面时再加载该页面的JS是一个很好的优化方法。

这里用到的就是vue的组件懒加载。在router.js中,不要使用import的方法引入组件,使用require.ensure。

import index from '@/components/index'
const index = r => require.ensure( [], () => r (require('@/components/index'),'index'))
//如果写了第二个参数,就打包到该`/JS/index` 的文件中。
//不写第二个参数,就直接打包在`/JS` 目录下。
const index = r => require.ensure( [], () => r (require('@/components/index')))

使用cdn

打包时,把vue、vuex、vue-router、axios等,换用国内的bootcdn 直接引入到根目录的index.html中。

在webpack设置中添加externals,忽略不需要打包的库。

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

在index.html中使用cdn引入。

<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>

将JS文件放在body的最后

默认情况下,build后的index.html中,js的引入是在header中。

使用html-webpack-plugin插件,将inject的值改成body。就可以将js引入放到body最后。

var HtmlWebpackPlugin = require('html-webpack-plugin');
new HtmlWebpackPlugin({
   inject: 'body',
})

压缩代码并移除console

使用UglifyJsPlugin 插件来压缩代码和移除console。

new webpack.optimize.UglifyJsPlugin({
 compress: {
  warnings: false,
  drop_console: true,
  pure_funcs: ['console.log']
 },
 sourceMap: false
})

暂时只查到了这几个优化方法。

Javascript 相关文章推荐
某人初学javascript的时候写的学习笔记
Dec 30 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
Jan 12 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
May 12 Javascript
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
下拉框select的绑定示例
Sep 04 Javascript
js数组的基本操作(很全自己整理的)
Oct 16 Javascript
jquery插件unobtrusive实现片段式加载
Jun 15 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
Jan 01 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
Sep 13 Javascript
微信小程序如何获取用户收货地址
Nov 27 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
Apr 01 #Javascript
Vue项目使用CDN优化首屏加载问题
Apr 01 #Javascript
对Angular中单向数据流的深入理解
Mar 31 #Javascript
jQuery中复合选择器简单用法示例
Mar 31 #jQuery
jQuery中内容过滤器简单用法示例
Mar 31 #jQuery
jQuery中可见性过滤器简单用法示例
Mar 31 #jQuery
Postman模拟发送带token的请求方法
Mar 31 #Javascript
You might like
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
PHP5中MVC结构学习
2006/10/09 PHP
php生成excel文件的简单方法
2014/02/08 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
js实现无缝轮播图插件封装
2020/07/31 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python JSON编解码方式原理详解
2020/01/20 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
公务员保密承诺书
2014/03/27 职场文书
数字化校园建设方案
2014/05/03 职场文书
公司口号大全
2014/06/11 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
python 实现的截屏工具
2021/05/08 Python
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
Mysql忘记密码解决方法
2022/02/12 MySQL