详解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 相关文章推荐
更换select下拉菜单背景样式的实现代码
Dec 20 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
jquery 实现密码框的显示与隐藏示例代码
Sep 18 Javascript
基于jQuery实现自动轮播旋转木马特效
Nov 02 Javascript
AngularJS 执行流程详细介绍
Aug 18 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
Vue.js上下滚动加载组件的实例代码
Jul 17 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
微信小程序 自定义弹窗实现过程(附代码)
Dec 05 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
JavaScript 函数式编程的原理
2009/10/16 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Django实现表单验证
2018/09/08 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
python实现静态web服务器
2019/09/03 Python
python 监控logcat关键字功能
2020/09/04 Python
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
学生周末回家住宿长期请假条
2014/02/15 职场文书
优质护理心得体会
2016/01/22 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android