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 相关文章推荐
收集json解析的四种方法分享
Jan 17 Javascript
一个判断抢购时间是否到达的简单的js函数
Jun 23 Javascript
防止登录页面出现在frame中js代码
Jul 22 Javascript
一个检测表单数据的JavaScript实例
Oct 31 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
js简单判断移动端系统的方法
Feb 25 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
Javascript中判断一个值是否为undefined的方法详解
Sep 28 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
python实现拼接图片
2020/03/23 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
四年的个人工作自我评价
2013/12/10 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
团代会主持词
2014/04/02 职场文书
简易版租房协议书范本
2014/10/13 职场文书
2014年手术室工作总结
2014/11/26 职场文书
小石潭记导游词
2015/02/03 职场文书
大学生求职信怎么写
2015/03/19 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2015年测量员工作总结
2015/05/23 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL