详解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 相关文章推荐
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
javascript getElementsByClassName函数
Apr 01 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
JavaScrip数组去重操作实例小结
Jun 20 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 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 header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
php除数取整示例
2014/04/24 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
js css样式操作代码(批量操作)
2009/10/09 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
React组件生命周期详解
2017/07/03 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
python实现堆排序的实例讲解
2020/02/21 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
会计学毕业生求职信
2014/06/25 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
护士自荐信范文
2015/03/25 职场文书
z-index不起作用
2021/03/31 HTML / CSS
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
Python办公自动化解决world文件批量转换
2021/09/15 Python