详解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 相关文章推荐
解决iframe的frameborder在chrome/ff/ie下的差异
Aug 12 Javascript
js简单实现交换Li的值
May 22 Javascript
JS在可编辑的div中的光标位置插入内容的方法
Nov 20 Javascript
用JavaScript实现对话框的教程
Jun 04 Javascript
javascript实现全角半角检测的方法
Jul 23 Javascript
JS实现的验证身份证及获取地区功能示例
Jan 16 Javascript
JS正则表达式验证中文字符
May 08 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
详解微信小程序之一键复制到剪切板
Apr 24 Javascript
vue 组件销毁并重置的实现
Jan 13 Javascript
JavaScript实现酷炫的鼠标拖尾特效
Feb 18 Javascript
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
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里8个鲜为人知的安全函数分析
2014/12/09 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
node.js中的console用法总结
2014/12/15 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
python模块之StringIO使用示例
2015/04/08 Python
Python制作简单的网页爬虫
2015/11/22 Python
Python paramiko模块的使用示例
2018/04/11 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
我的五年职业生涯规划
2014/01/23 职场文书
学生干部培训方案
2014/06/12 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL