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 相关文章推荐
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
JS数组array元素的添加和删除方法代码实例
Jun 01 Javascript
Javascript简单改变表单元素背景的方法
Jul 15 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
jQuery序列化表单成对象的简单实现
Nov 29 Javascript
JS实现元素上下左右移动效果
Oct 18 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
Feb 06 Javascript
Vuex中mutations与actions的区别详解
Mar 01 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
scrapyd schedule.json setting 传入多个值问题
Aug 07 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
QQ登录简单实现代码
2021/03/09 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
python通过线程实现定时器timer的方法
2015/03/16 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
pytorch 常用线性函数详解
2020/01/15 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
银行存款证明样本
2014/01/17 职场文书
药店主任岗位责任制
2014/02/10 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
小学生植树节活动总结
2014/07/04 职场文书
经营目标管理责任书
2014/07/25 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android