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

文章目录

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

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

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


一、加载性能指标总览

指标 全称 关注点 推荐阈值 描述
TTFB Time To First Byte 服务器响应速度 ≤ 0.8s(理想) 从请求发出到收到第一个字节的时间
FCP First Contentful Paint 首次内容渲染 ≤ 1.8s(理想) 浏览器首次渲染页面上任何文本、图像、Canvas 的时间
TTI Time 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

优化方向


2. FCP(First Contentful Paint)

定义

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

推荐值

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

优化方向


3. TTI(Time To Interactive)

定义

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

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

推荐值

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

优化方向


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

bash 复制代码
npm install web-vitals
ts 复制代码
// 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)

ts 复制代码
// 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 入口调用:

ts 复制代码
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
ts 复制代码
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
相关推荐
恋猫de小郭39 分钟前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端