刘馨忆

腾讯 IEG 公共数据平台部前端开发工程师,硕士毕业于英国曼彻斯特大学。主要负责内容生态相关toB 业务系统的开发,对内容审核链路、数据可视化看板有丰富的开发经验。

前言

作为一名前端开发者,想必你一定知道前端技术的迅猛发展。每过一段时间都会有热火朝天的新技术或者新开发方式,前端开发者也经常嘲讽“求不要更新了,学不动了”、“一入前端深似海”等。随着前端技术和业务的发展,我们也难免会遇到前端项目重构的问题,那究竟该如何评估目前前端技术框架的质量,众多性能指标我们该如何衡量呢?

本文将介绍新一代 Web 页面性能评估方案。逐渐梳理出一种较为合理的新旧系统页面性能评估对比方案,在不适用的场景下如何添加自定义测速,以及在得到指标数据后如何尽可能的做一些性能优化。

为什么需要对页面性能做出量化评估

游戏说管理端(腾讯内部智能化游戏内容增长平台)系统庞大内容繁多、并且多年来基于业务需求不断堆叠功能定制代码,现下已经很难继续进行新功能开发,因而在2020年下至2021年初开始逐步对旧版游戏说管理端的页面进行重构。

在完成3个左右页面重构之后,除去在用户体验交互上一些主观的感受之外,如何基于完全不同的前端技术框架来评估 Web 页面的性质量好坏是复盘阶段的关键,有效地收集性能数据也可以对之后的研发方向提供正确的引导。

目前,对网页的性能评估可以从很多维度来进行。本文准备梳理一些较为关键的性能指标来明确我们之后应该关注的一些方向,以及在数据收集阶段做了哪些努力来进行性能和数据的优化。

从输入域名到页面展现

浏览器做了什么?

从开发&运维角度方面来看,总体来说分为以下几个过程:

  • DNS 解析:将域名解析成 IP 地址。
  • TCP 连接:TCP 三次握手。
  • 发送 HTTP 请求。
  • 服务器处理请求并返回 HTTP 报文。
  • 浏览器解析渲染页面。
  • 断开连接:TCP 四次挥手。

在从 URL 输入到页面展现到底发生什么?我们关注的是在浏览器完成解析渲染页面这一步做了哪些工作,从前端的角度的来讲大致有页面资源加载(包含样式文件、JS 文件、图片等)以及拿到内容后的渲染。以 chrome 的 webkit 内核为例:

[点击查看大图]

浏览器内核拿到内容后,大致有以下几个渲染步骤:

  • 解析 HTML,构建 DOM 树。
  • 解析 CSS,生成 CSS 规则树。
  • 合并 DOM 树和 CDD 规则树,生成 render 树。
  • 计算各个元素的位置尺寸等信息,布局 render 树。
  • 绘制 render 树。

了解页面渲染机制可以更好地帮助我们理解页面指标的含义,接下来我们来看页面的性能可以从哪些维度评估。

如何客观评估用户体验质量?

优化用户体验一直都是项目开发过程中的重要环节,用户体验的好坏可能直接关系到项目成败。在不同的情境中对用户体验的评估维度可能会是不同的,根据谷歌提供的 Chrome DevTools 各个网站共享一组通用的指标 Core Web Vitals,2020年最新一代的标准中包含加载体验、交互性和视觉稳定性。接下来我们先来了解下三个可度量的指标:

[点击查看大图]

1. Largest Contentful Paint (LCP)

最大内容渲染时间指标。

由于该时间会随着页面内容的实际渲染过程而变化,因此是一个非常重要的指标,它意味着标准报告视窗内的最大内容元素的渲染时间,一般应该在 2.5s 以内完成。为了保持该指标的简单性,它现在只考虑几种元素:

  • 元素
  • 元素内的 元素
  • CSS 中通过 url( ) 加载背景图片的元素
  • 包含文本节点或其他内联文本元素子级的块级元素

最大内容的渲染是指当前视窗内可见的渲染面积最大的元素,页面的加载过程是线性的,元素是一个一个逐步渲染到页面上的,而不是一瞬间全部渲染上去,所以这个渲染面积最大的元素可能随时在发生变化

[点击查看大图]

2. First Input Delay (FID)

记录用户和页面进行首次交互操作所花费的时间。

衡量可交互性指标,为了提供良好的用户体验,页面的 FID 应当小于 100毫秒。

[点击查看大图]

如上图所示,FID 发生在 FCP 之后,到 TTL(Time To Live)的这段时间。浏览器接收到用户输入操作时(