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 相关文章推荐
OfflineSave离线保存代码再次发布使用说明
May 23 Javascript
Jquery中获取iframe的代码
Jan 11 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
实例教学如何写vue插件
Nov 30 Javascript
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
vue中的mvvm模式讲解
Jan 31 Javascript
Vue数据绑定简析小结
May 07 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
JavaScript高级程序设计之基本引用类型
Nov 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
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php事务处理实例详解
2014/07/11 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
js实现秒表计时器
2019/12/16 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
用Python编写简单的微博爬虫
2016/03/04 Python
实例讲解Python3中abs()函数
2019/02/19 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
python2 对excel表格操作完整示例
2020/02/23 Python
python 负数取模运算实例
2020/06/03 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
教学质量评估实施方案
2014/03/17 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
银行员工考核评语
2014/12/31 职场文书
异地恋情人节寄语
2015/02/28 职场文书
专项资金申请报告
2015/05/15 职场文书
高温慰问简报
2015/07/21 职场文书