详解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 相关文章推荐
jQuery判断元素是否是隐藏的代码
Apr 24 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
select标记美化--JS式插件、后期加载
Apr 01 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
May 13 Javascript
ajax读取数据后使用jqchart显示图表的方法
Jun 10 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
JavaScript toUpperCase()方法使用详解
Aug 26 Javascript
JavaScript严格模式下关于this的几种指向详解
Jul 12 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 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
AM/FM收音机的安装与调试
2021/03/02 无线电
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
python操作oracle的完整教程分享
2018/01/30 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
如何在python中写hive脚本
2019/11/08 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
培训心得体会
2013/12/29 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
2014年财政工作总结
2014/12/10 职场文书
师德承诺书
2015/01/20 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
人生遥控器观后感
2015/06/11 职场文书
党组织结对共建协议书
2016/03/23 职场文书
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL