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 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
使用js实现关闭js弹出层的窗口
Feb 10 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
jquery遍历table的tr获取td的值实现方法
May 19 Javascript
Angular使用cli生成自定义文件、组件的方法
Sep 04 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
js数组去重的方法总结
Jan 18 Javascript
详解使用React.memo()来优化函数组件的性能
Mar 19 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
May 21 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 Javascript
es6函数之尾递归用法实例分析
Apr 25 Javascript
js 实现验证码输入框示例详解
Sep 23 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
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
php获取excel文件数据
2017/04/21 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
node.js获取参数的常用方法(总结)
2017/05/29 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
浅谈Python中的模块
2020/06/10 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
12岁生日演讲稿
2014/05/14 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技