当前位置: 首页 > news >正文

WHAT - 前端性能指标(加载性能指标)

文章目录

  • 一、加载性能指标总览
  • 二、指标详细解析
    • 1. TTFB(Time To First Byte)
      • 定义
      • 推荐值
      • 优化方向
    • 2. FCP(First Contentful Paint)
      • 定义
      • 推荐值
      • 优化方向
    • 3. TTI(Time To Interactive)
      • 定义
      • 推荐值
      • 优化方向
    • 4. Speed Index
      • 定义
      • 推荐值
      • 优化方向
    • 5. Server Response Time
      • 定义
      • 推荐值
      • 优化方向
  • 三、在 React 项目中采集加载性能指标
    • 1. 使用 web-vitals 获取 TTFB、FCP
    • 2. 使用 Performance API 获取更多指标(TTI、Speed Index)
    • 3. TTI 与 Speed Index 的测量方式建议
  • 四、采集后的应用与落地
  • 五、React 项目实战建议

在 WHAT - 前端性能指标 中我们简单介绍了几类前端性能指标。今天我们主要介绍第二类指标。

“加载性能指标(Loading Performance Metrics)”,它们描述了从用户发起请求到页面真正「可用」这段时间内的各个阶段,是性能优化的核心环节之一。

下面我将系统整理每个指标的 含义、推荐阈值、影响因素与优化方向,最后再给出一套适用于 React 项目的 采集与上报方案,类似我们之前对 Core Web Vitals 的做法。


一、加载性能指标总览

指标全称关注点推荐阈值描述
TTFBTime To First Byte服务器响应速度≤ 0.8s(理想)从请求发出到收到第一个字节的时间
FCPFirst Contentful Paint首次内容渲染≤ 1.8s(理想)浏览器首次渲染页面上任何文本、图像、Canvas 的时间
TTITime To Interactive可交互时间≤ 5s(理想)页面加载完成后可稳定响应用户交互的时间
Speed Index-感知加载速度≤ 3.4s(理想)页面视觉内容出现的速度(越低越好)
Server Response Time-后端响应≤ 600ms(理想)服务器对请求的响应速度(是 TTFB 的主要组成部分)

二、指标详细解析

1. TTFB(Time To First Byte)

定义

TTFB 是指浏览器向服务器发送请求,到收到第一个字节的时间。它反映了:

  • 网络延迟
  • DNS 解析
  • TCP/TLS 连接
  • 后端服务器响应时间

推荐值

  • 优秀:≤ 800 ms
  • 需要改进:800–1800 ms
  • 较差:> 1800 ms

优化方向

  • 使用 CDN 靠近用户。具体可以阅读 WHAT - CDN - Content Delivery Network
  • 缓存静态资源。具体可以阅读 WHAT - 静态资源缓存穿透
  • 优化后端渲染速度(SSR)。具体可以阅读 WHAT - SSR vs SSG vs ISR
  • 减少不必要的重定向

2. FCP(First Contentful Paint)

定义

FCP 是浏览器首次绘制页面内容(不一定是首屏完整)所需的时间。例如:渲染一个背景色、一段文本、一张图像。

推荐值

  • 优秀:≤ 1.8 s
  • 需要改进:1.8–3 s
  • 较差:> 3 s

优化方向

  • 减少 JS/CSS 阻塞渲染。具体可以阅读 WHAT - 前端阻塞场景梳理
  • 预加载关键字体和样式。具体可以阅读 WHAT - script 加载(含 async、defer、preload 和 prefetch 区别)
  • 使用服务器端渲染(SSR/SSG)。具体可以阅读 WHAT - SSR vs SSG vs ISR
  • 减少首屏渲染资源体积。具体可以阅读 HOW - 如何使用 bundle-analyzer 工具优化包体积

3. TTI(Time To Interactive)

定义

TTI 表示页面加载完成后,能够快速、可靠响应用户输入的时间点。这个指标涵盖了:

  • 页面内容已经加载
  • JS 解析和执行完成
  • 主线程空闲可响应交互

推荐值

  • 优秀:≤ 5 s
  • 需要改进:5–10 s
  • 较差:> 10 s

优化方向

  • 拆分 bundle,减少首次 JS 执行。具体可以阅读 HOW - 如何使用 bundle-analyzer 工具优化包体积
  • 延迟加载非关键 JS。具体可以阅读 [WHAT - script 加载(含 async、defer、preload 和 prefetch 区别)]
  • 使用 Web Worker 减轻主线程压力。具体可以阅读 WHAT - 前端 Web Worker 和 Service Worker(含工作者线程概念)
  • 优化 React hydration(或使用部分 hydration)

4. Speed Index

定义

Speed Index 衡量页面视觉内容出现的速度,越低表示用户看到完整内容的速度越快。

与 LCP 不同,Speed Index 是连续过程的综合分值,而非单一时刻。

推荐值

  • 优秀:≤ 3.4 s
  • 需要改进:3.4–5.8 s
  • 较差:> 5.8 s

优化方向

  • 优化首屏渲染路径(Critical Rendering Path)
  • 关键内容提前加载
  • 避免大体积 JS 阻塞渲染
  • 使用懒加载 + 骨架屏(Skeleton UI)

5. Server Response Time

定义

服务器响应时间是后端处理请求 + 返回响应的时间,TTFB 的重要组成部分。

推荐值

  • 优秀:≤ 600 ms
  • 需要改进:600–1800 ms
  • 较差:> 1800 ms

优化方向

  • 缓存后端响应(HTTP 缓存、Redis)
  • 减少 DB 查询
  • 使用负载均衡
  • 靠近用户部署(边缘节点)

三、在 React 项目中采集加载性能指标

这些指标有一部分可以通过浏览器的 Performance API 直接采集,例如 TTFB、FCP。

TTI、Speed Index 更适合通过 Lighthouse 或 RUM 工具(如 Sentry Performance)获得。


1. 使用 web-vitals 获取 TTFB、FCP

npm install web-vitals
// src/reportWebVitals.ts
import { getFCP, getTTFB, ReportHandler } from 'web-vitals';const reportWebVitals = (onPerfEntry?: ReportHandler) => {if (onPerfEntry && onPerfEntry instanceof Function) {getFCP(onPerfEntry);getTTFB(onPerfEntry);}
};export default reportWebVitals;

2. 使用 Performance API 获取更多指标(TTI、Speed Index)

// src/utils/performanceMetrics.ts
export function collectPerformanceMetrics() {const perf = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming;if (!perf) return null;return {ttfb: perf.responseStart - perf.requestStart,domContentLoaded: perf.domContentLoadedEventEnd - perf.startTime,loadTime: perf.loadEventEnd - perf.startTime,serverResponseTime: perf.responseStart - perf.fetchStart,// 其他指标可拓展};
}

然后在 React 入口调用:

import { collectPerformanceMetrics } from './utils/performanceMetrics';window.addEventListener('load', () => {const metrics = collectPerformanceMetrics();console.log(metrics);fetch('/api/performance', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(metrics),});
});

注意,这类指标在 load 事件监听里执行。


3. TTI 与 Speed Index 的测量方式建议

浏览器本身没有直接暴露 TTISpeed Index,实际生产中常用:

  • 使用 Lighthouse / PageSpeed Insights 做离线分析
  • 使用 Sentry Performance / New Relic / Datadog RUM 实时采集
  • 或使用 tti-polyfill
import ttiPolyfill from 'tti-polyfill';ttiPolyfill.getFirstConsistentlyInteractive().then((tti) => {console.log('TTI:', tti);
});

四、采集后的应用与落地

场景指标优化方向
后端响应慢TTFB / Server Response Time缓存、CDN、靠近用户部署
白屏时间长FCP减少阻塞渲染,预加载关键资源
首次可交互慢TTI减少 JS 体积,延迟加载
页面加载体验差Speed Index骨架屏、渐进渲染
网络慢所有加载指标静态资源优化 + HTTP/2 + CDN

五、React 项目实战建议

技术应用
web-vitals采集 FCP、TTFB 等关键指标
Performance API获取详细加载阶段时间点
tti-polyfill获取 TTI
Lighthouse离线评估 Speed Index
Sentry / 自建服务上报真实用户性能指标(RUM)
SSR/SSG + CDN降低 TTFB 与 FCP
http://www.dtcms.com/a/482116.html

相关文章:

  • 网站外包要注意什么wordpress 布局编辑器
  • 人工智能课程:课程目录介绍 总纲
  • 1、机器学习与深度学习
  • 深入解析 kube-proxy:Kubernetes 服务发现的网络基石
  • Bestseller验厂核心解读
  • 1. cuda配置代码提示
  • Docker 构建教程:学习上下文、架构和性能优化技术
  • mysql数据库高级特性(一)
  • 做网站读什么专业个人网站备案内容不合格
  • 如何实现一个线程安全的容器:从同步机制到异常安全的设计实践
  • 网站建设与运营课程建筑行业官网
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的互联网运营体系化研究
  • 线上教学小程序:构建高效互动的云端学习空间
  • JAVA校园跑腿校园外卖源码校园外卖小程序校园代买帮忙外卖源码社区外卖源码小程序+公众号+h5
  • 神经网络之链式法则的推导
  • 打印室预约系统|基于java和小程序的打印室预约系统设计与实现(源码+数据库+文档)
  • 东莞市网站建设制作设计平台wordpress顶部导航栏怎么创建
  • 理解 Git 命令 `git reset --hard origin/pre`:版本回退的“利刃”与使用禁忌
  • Git 10 ,使用 SSH 提升 Git 操作速度的实践指南( Git 拉取推送响应慢 )
  • 【C++】使用MSBuild命令行编译ACE、TAO、DDS
  • 郑州市建设投资集团公司网站网站开发私活
  • ⽹络原理-HTTP/HTTPS
  • 58同城哈尔滨网站建设宁波网络公司网站建s
  • windows系统实操Flutter鸿蒙环境搭建
  • Epimedin-B 通过靶向 MCOLN1/TRPML1 通道阻断自噬流
  • HUD-汽车图标内容
  • 使用Vela编译器开发Ethos-U NPU流程导引
  • 西城区网站建设推广seo网站技术团队
  • 泛型学习——看透通配符?与PECS 法则
  • 跨平台音频IO处理库libsoundio实践