详解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 相关文章推荐
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
Dec 17 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
js简单实现图片延迟加载的方法
Jul 19 Javascript
Yarn的安装与使用详细介绍
Oct 25 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
Oct 26 Javascript
javascript中的后退和刷新实现方法
Nov 10 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
react.js组件实现拖拽复制和可排序的示例代码
Aug 20 Javascript
JS控制只能输入数字并且最多允许小数点两位
Nov 24 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 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调用Oracle存储过程
2006/10/09 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
php异常处理捕获错误整理
2019/09/23 PHP
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python并发编程之线程实例解析
2017/12/27 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
css sprite简单实例
2016/05/23 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
const和static readonly区别
2013/05/20 面试题
汇科协同Java笔试题
2012/03/31 面试题
开业庆典答谢词
2014/01/18 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
泰山导游词
2015/02/02 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫