Skip to content
文章目录

首页加载速度优

Spa 单页面的加载过程

  1. 首先就是 html,也就是 FP 阶段
html
<div id="app"></div>

页面在导航后首次呈现出不同于导航前内容的时间点,有一个东西回来渲染在页面上了

  1. 然后是静态资源 css,js 请求和加载,之后解析 js,生成 HTML,也就是 FCP 阶段,css,js 资源加载下来了,首次的内容绘制,有一个大结构了
html
<div id="app">
  <div class="header"></div>
</div>

比如 app 根目录里面有一个 header,div

  1. 最后,就是 FMP,ajax 请求数据之后,首次有效绘制,就是页面加载差不多了,但是可能图片还没加载出来

总结

从 FP 到 FMP 这个过程全是白屏,可能你的 header 如果有啥大背景色啊,这个背景色或许会出来,ajax 之后,才会真正去解析我们的数据,把数据放入我们的 html 标签中

首页加载慢的原因

在 vue 项目中,引入到项目中的 js,css 都会被打包进入 vendor.js,如果引入的第三方库众多,最后打包后的 vendor.js 就会体积庞大,浏览器再加载该文件后才会进入首屏,如果 vendor.js 体积过大,那么加载的时间就越久,白屏的时间就越长

加载速度慢解决方案

分离打包第三方资源包

在 build 文件夹下的 webpack.base.conf.js 中配置 externals 可以分离打包第三方资源包,key 是依赖包的名称,value 是源码抛出来的全局变量,这样打包后这些文件就不会打包到 vendor.js 和 app.js 中,会大大减少打包体积。(尤其是你的项目用了多个三方库)

这个做法就是可以不把这些资源打包到 bundle 和 vendor.js 中,而是在运行时去获取需要的依赖和资源,大大减少打包的体积。

第三方库使用 CDN 引入

在项目开发中,我们会用到很多第三方库,如果可以按需引入,我们可以只引入自己需要的组件,来减少所占空间,但也会有一些不能按需引入,我们可以采用 CDN 外部加载,在 index.html 中从 CDN 引入组件,去掉

其他页面的组件 import,修改 webpack.base.config.js,在 externals 中加入该组件,这是为了避免编译时找不到组件报错。

//这里是我再项目中的配置
//切记只适用于测试,要是上线一定是购买付费的
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vant@2.12/lib/index.css" />
<script src="https://cdn.jsdelivr.net/npm/vant@2.12/lib/vant.min.js"></script>

vue-router 路由懒加载

这个是相当重要的一步,这步会大大减少打包后的体积,提升加载速度

在访问到相关页面才加载对应的路由和资源,才是正确的,否则全在初始化项目时加载,那么首屏时间就会很久。

静态资源压缩,代码压缩,图片压缩

  1. 开启 gzip 压缩,(这个需要服务端配合)
  2. 图片压缩
  3. 尽量使用 icon 代替图片
  4. js 代码压缩
  5. css 代码压缩

不要滥用三方库

尽量一个项目只使用一个库,不要为了方便使用多个库而忽略了性能。

去掉编译中的 map 文件

为了避免部署打包体积过大,我们通常去掉源文件(就是打包后看不到源代码),打包后的体积会小很多

代码层面的优化

  1. 项目组件化,去掉冗余的代码
  2. 正式环境去掉 console.log
  3. index.html 页面中将 js 文件放到页面最底部,css 文件放在<header>中使用 link 引入。

这么做的原因是因为浏览器渲染的机制是自上而下的,如果把 js 文件放到头部渲染,等 js 文件渲染完成才开始绘制页面,这样速度会很慢,并且会受到 css 渲染的阻塞,所以要把 js 文件放到最底部,并且一些没有关联性的文件可以采用异步加载

解决白屏,体验优化

上边已经讲述了优化问题,把所有的优化都做完之后 , 加载速度有了显著提升,把所有的优化都做完之后,加载速度有了显著提升}把所有的优化都做完之后,加载速度有了显著提升把所有的优化都做完之后,加载速度有了显著提升,但是再网慢的时候还是会有白屏,所以再白屏期间加骨架屏和 loading 就显得格外重要了。

html
<body>
  //这里亲测有效,放心使用
  <div id="app">
    // 我们只需要再这里添加loading图或者骨架屏,有人会说怎么控制它的显示隐藏啊,
    //不用担心,再项目初始化完成后会自动替换为你的页面。
    <div class="self-loading">页面正快马加鞭赶来,请耐心等待</div>
  </div>
</body>

参考资料

vue 首页加载速度优化及解决首页白屏的问题

第 119 题:Vue 如何优化首页的加载速度?Vue 首页白屏是什么问题引起的?如何解决呢?

三种方法,合力解决 vue 首屏加载慢,打包后的 vendor.js 文件过大问题

CHROME 浏览器发送 HTTP 最大请求并发数限制

前端性能优化篇——浏览器 http 同域名并发请求对限制

拆分 js 文件_教你如何正确的拆分 JavaScript 代码