详解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 相关文章推荐
Web层改进II-用xmlhttp 无声息提交复杂表单
Jan 22 Javascript
XENON基于JSON变种
Jul 27 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
实例分析javascript中的call()和apply()方法
Nov 28 Javascript
jquery中change()用法实例分析
Feb 06 Javascript
深入理解JavaScript中的对象复制(Object Clone)
May 18 Javascript
js编写选项卡效果
May 23 Javascript
基于vue.js路由参数的实例讲解——简单易懂
Sep 07 Javascript
webuploader实现上传图片到服务器功能
Aug 16 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 Javascript
基于jQuery拖拽事件的封装
Nov 29 jQuery
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
多重?l件?合查?(二)
2006/10/09 PHP
在PHP中执行系统外部命令
2006/10/09 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python使用django获取用户IP地址的方法
2015/05/11 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python中shell执行知识点
2020/05/06 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
django中ImageField的使用详解
2020/12/21 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
建筑文秘专业个人求职信范文
2013/12/28 职场文书
服装设计专业求职信
2014/06/16 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
2017春节晚会开幕词
2016/03/03 职场文书