详解vue页面首次加载缓慢原因及解决方案


Posted in Javascript onNovember 06, 2019

第一次打包vue的项目部署到服务器下时,发现初次加载特别的缓慢,将近20s页面才加载出来,完全没有开发环境上的那么流畅。主要原因是页面在打包后如果不进行相关配置会导致资源文件特别的大,一次想要全部加载完成会特别的耗时。这里简单总结一下自己用到的一些优化的方案。

首先我们可以安装webpack-bundle-analyzer 插件,通过这个插件我们可以在打包的时候看到打包文件的大小,可以明显的看出哪些文件比较大。

解决方案一

1,去掉编译文件中map文件。在编译好后,我们会看到文件夹下有特别多的.map文件,这些文件主要是帮助我们线上调试代码,查看样式。所以为了避免部署包过大,通常都不生成这些文件。

在 config/index.js 文件中将productionSourceMap 的值设置为false. 再次打包就可以看到项目文件中已经没有map文件 (文件大小 35MB-->10.5MB)

2,vue-router 路由懒加载

懒加载即组件的延迟加载,通常vue的页面在运行后进入都会有一个默认的页面,而其他页面只有在点击后才需要加载出来。使用懒加载可以将页面中的资源划分为多份,从而减少第一次加载的时候耗时。

懒加载路由配置:

详解vue页面首次加载缓慢原因及解决方案

非懒加载路由配置:

详解vue页面首次加载缓慢原因及解决方案

如图所示为通过懒加载后打包的js文件。而非懒加载的打包后一般只有一个app.js 文件。

详解vue页面首次加载缓慢原因及解决方案

解决方案二

使用CDN减小代码体积加快请求速度

1. 为什么使用CDN

使用CDN主要解决两个问题:

  • 打包时间太长、打包后代码体积太大,请求慢
  • 服务器网络不稳带宽不高,使用cdn可以回避服务器带宽问题

2. 具体步骤

1.在/index.html中引入CDN

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>vue-manage-system</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">

    <script src="https://cdn.bootcss.com/vue/2.5.3/vue.js"></script>
    <script src="https://cdn.bootcss.com/vue-router/2.7.0/vue-router.min.js"></script>
    <script src="https://cdn.bootcss.com/axios/0.17.1/axios.min.js"></script>
    <link rel="stylesheet" href="https://cdn.bootcss.com/element-ui/2.4.0/theme-chalk/index.css" rel="external nofollow" >
    <script src="https://cdn.bootcss.com/element-ui/2.4.0/index.js"></script>


  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

注意:修改配置后还是提示Element未定义,是因为Element依赖Vue,vue.js需要在element-ui之前引入,所以vue.js也要改为cnd的引入方式.

2.修改/build/webpack.base.conf.js中修改配置。给module.exports添加externals属性(详见https://webpack.docschina.org/configuration/externals/),其中键是项目中引用的,值是所引用资源的名字。需要注意的是资源名需要查看所引用的JS源码,查看其中的全局变量是什么,例如element-ui的全局变量就说ELEMENT

module.exports = {
  context: path.resolve(__dirname, '../'),
  entry: {
   app: './src/main.js'
  },
  externals: {
   'vue': 'Vue',
   'vue-router': 'VueRouter',
   'ElementUI': 'ELEMENT',
   'axios': 'axios',
  }
 }

3.删除原先的import

如果不删除原先的import,项目还是会从node_modules中引入资源。
也就是说不删的话,npm run build时候仍会将引用的资源一起打包,生成文件会大不少。所以我认为还是删了好。

如:

详解vue页面首次加载缓慢原因及解决方案

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
safari,opera嵌入iframe页面cookie读取问题解决方法
Jun 23 Javascript
jquery中one()方法的用法实例
Jan 16 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
Oct 28 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
javascript 产生随机数的几种方法总结
Sep 26 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
vue中如何使用ztree
Feb 06 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
Node 搭建一个静态资源服务器的实现
May 20 Javascript
electron 安装,调试,打包的具体使用
Nov 06 #Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 #Javascript
在vue中阻止浏览器后退的实例
Nov 06 #Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 #Javascript
vue项目强制清除页面缓存的例子
Nov 06 #Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 #Javascript
JS实现随机抽取三人
Nov 06 #Javascript
You might like
PHP.MVC的模板标签系统(二)
2006/09/05 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
AngularJS实现星星等级评分功能
2016/09/24 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
常用python数据类型转换函数总结
2014/03/11 Python
python实现多线程采集的2个代码例子
2014/07/07 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
解决python删除文件的权限错误问题
2018/04/24 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
详解Python用户登录接口的方法
2019/04/17 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
用python写PDF转换器的实现
2020/10/29 Python
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
先进党支部事迹材料
2014/01/13 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python