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的仿百度的鼠标移入图片抖动效果
Sep 17 Javascript
精通Javascript系列之数据类型 字符串
Jun 08 Javascript
js判断是否为数组的函数: isArray()
Oct 30 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 Javascript
vue设置默认首页的操作
Aug 12 Javascript
JavaScript中CreateTextFile函数
Aug 30 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
详解如何使用Node.js实现热重载页面
May 06 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
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python去掉字符串中重复字符的方法
2014/02/27 Python
盘点提高 Python 代码效率的方法
2014/07/03 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
九州传奇上机题
2014/07/10 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
2014的自我评价
2014/01/13 职场文书
中年人生感言
2014/02/04 职场文书
爱护草坪标语
2014/06/24 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
5道关于python基础 while循环练习题
2021/11/27 Python