首屏和白屏时间
灵感胜于汗水 Lv5

概念

首屏时间

指的是浏览器从响应用户输入网址地址,到首屏内容渲染完成的时间,此时整个网页不一定要全部渲染完成,但需要展示当前视窗需要的内容。

白屏时间

白屏时间是指浏览器开始显示内容的时间。因此,我们通常认为解析完 <head> 的时刻或开始渲染 <body> 标签就是页面白屏结束的时间。

如何计算

首屏时间

1
2
3
4
5
6
window.onload = () => {
console.log(Date.now() - performance.timing.navigationStart) //DOM树加载完成所消耗的时间
}
document.addEventListener('DOMContentLoaded', () => {
console.log(Date.now() - performance.timing.navigationStart) //DOM树以及图片等外部资源全部加载完成所消耗的时间
})

DomContentLoaded在DOM树加载完之后立刻触发,DOM树加载完成之后,继续加载图片等外部文件,加载完成之后,onload事件触发。所以这两个都不适合用于计算首屏时间。

MutationObserver

TODO

白屏时间

使用performance,可以获取到当前页面中与性能相关的信息。

head 标签末尾添加 script 标签如下:

1
2
3
4
5
6
7
8
9
<head>
<meta charset="UTF-8">
<title>首屏</title>
<link rel="stylesheet" href="common.css">
<link rel="stylesheet" href="page.css">
<script>
console.log(new Date().getTime() - performance.timing.navigationStart)
</script>
</head>

首屏优化

路由懒加载

把不同路由对应的组件分割成不同的代码块,待路由被请求的时候会单独打包路由,使得入口文件变小,加载速度大大增加。

1
2
3
4
5
routes:[ 
path: 'Blogs',
name: 'ShowBlogs',
component: () => import('./components/ShowBlogs.vue')
]

缓存

采用HTTP缓存,设置Cache-ControlLast-ModifiedEtag等响应头;

前端合理使用LocalStorage

服务端渲染

使用SSR,也就是服务端渲染, 组件或页面通过服务器生成html字符串,再发送到浏览器。

图片懒加载

按需加载代码

比如按需引入UI组件库:

1
2
3
4
import { Button, Input, Pagination, Table, TableColumn, MessageBox } from 'element-ui';
Vue.use(Button)
Vue.use(Input)
Vue.use(Pagination)

HTTP2

使用 HTTP2 ,相比于 HTTP1,解析速度更快;支持多路复用,多个请求可以共用一个 TCP 连接;提供了首部压缩功能;支持服务器推送,服务器可以在发送 HTML 页面时,主动推送其他资源,而不用等到浏览器解析到相应位置发请求再响应。

减少 HTTP 请求数量,减少 HTTP 请求大小。(雪碧图)

CDN

开启GZip压缩

优化CSS代码

减少回流、重绘;降低CSS选择器复杂度

  • 本文标题:首屏和白屏时间
  • 本文作者:灵感胜于汗水
  • 创建时间:2022-10-31 22:31:33
  • 本文链接:https://cjhsyc.github.io/2022/10/31/首屏和白屏时间/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!