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 相关文章推荐
Dojo 学习要点
Sep 03 Javascript
基于Jquery的动态创建DOM元素的代码
Dec 28 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
用jquery实现点击栏目背景色改变
Dec 10 Javascript
jquery 滚动条事件简单实例
Jul 12 Javascript
jsPDF导出pdf示例
May 02 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
仅30行代码实现Javascript中的MVC
Feb 15 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
vue与bootstrap实现时间选择器的示例代码
Aug 26 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
nuxt 自定义 auth 中间件实现令牌的持久化操作
Nov 05 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调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python 图片处理库exifread详解
2021/02/25 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
详解Python类和对象内容
2021/06/22 Python
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
Nginx源码编译安装过程记录
2021/11/17 Servers