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 相关文章推荐
jQuery 获取、设置HTML或TEXT内容的两种方法
May 23 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
Aug 11 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
js实现上传文件添加和删除文件选择框
Oct 24 Javascript
jQuery点击头像上传并预览图片
Feb 23 Javascript
JavaScript变量类型以及变量作用域详解
Aug 14 Javascript
layui select动态添加option的实例
Mar 07 Javascript
详解js的视频和音频采集
Aug 09 Javascript
Node.js如何对SQLite的async/await封装详解
Feb 14 Javascript
前端天气插件tpwidget使用方法详解
Jun 24 Javascript
Vue如何使用混合Mixins和插件开发详解
Feb 05 Javascript
前端JavaScript大管家 package.json
Nov 02 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
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
python的id()函数解密过程
2012/12/25 Python
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
解释一下抽象方法和抽象类
2016/08/27 面试题
DataReader和DataSet的异同
2014/12/31 面试题
商务邀请函范文
2014/01/14 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
致800米运动员广播稿
2014/02/16 职场文书
电气工程自动化求职信
2014/03/14 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
支行行长竞聘报告
2014/11/06 职场文书
财务工作个人总结
2015/02/27 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python