LogRocket 性能监控 #
什么是前端性能监控? #
前端性能监控是测量、分析和优化 Web 应用性能的过程。良好的性能直接影响用户体验和业务指标。
text
┌─────────────────────────────────────────────────────────────┐
│ 性能对业务的影响 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Google 研究数据: │
│ │
│ 页面加载时间增加 1 秒: │
│ ├── 转化率下降 7% │
│ ├── 页面浏览量下降 11% │
│ └── 客户满意度下降 16% │
│ │
│ BBC 研究: │
│ ├── 页面加载每增加 1 秒 │
│ └── 用户流失率增加 10% │
│ │
│ Amazon 研究: │
│ ├── 页面加载延迟 100ms │
│ └── 销售额下降 1% │
│ │
└─────────────────────────────────────────────────────────────┘
Core Web Vitals #
LogRocket 自动收集 Google 定义的 Core Web Vitals 指标。
指标概览 #
text
┌─────────────────────────────────────────────────────────────┐
│ Core Web Vitals │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ LCP (Largest Contentful Paint) │ │
│ │ 最大内容绘制时间 │ │
│ │ │ │
│ │ 测量:页面主要内容加载完成的时间 │ │
│ │ 目标:< 2.5 秒 │ │
│ │ 需要改进:> 4.0 秒 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ FID (First Input Delay) │ │
│ │ 首次输入延迟 │ │
│ │ │ │
│ │ 测量:用户首次交互到浏览器响应的时间 │ │
│ │ 目标:< 100 毫秒 │ │
│ │ 需要改进:> 300 毫秒 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CLS (Cumulative Layout Shift) │ │
│ │ 累积布局偏移 │ │
│ │ │ │
│ │ 测量:页面视觉稳定性 │ │
│ │ 目标:< 0.1 │ │
│ │ 需要改进:> 0.25 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
LCP (Largest Contentful Paint) #
text
┌─────────────────────────────────────────────────────────────┐
│ LCP 详解 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 定义:视口内最大内容元素的渲染时间 │
│ │
│ 考虑的元素类型: │
│ - <img> 元素 │
│ - <svg> 内的 <image> │
│ - <video> 元素 │
│ - 通过 url() 加载的背景图片 │
│ - 块级元素(包含文本节点或内联级子元素) │
│ │
│ 影响 LCP 的因素: │
│ 1. 服务器响应时间 │
│ 2. JavaScript 和 CSS 阻塞 │
│ 3. 资源加载时间 │
│ 4. 客户端渲染 │
│ │
│ 优化建议: │
│ - 优化服务器响应时间 │
│ - 使用 CDN │
│ - 预加载关键资源 │
│ - 优化图片 │
│ - 减少阻塞资源 │
│ │
└─────────────────────────────────────────────────────────────┘
FID (First Input Delay) #
text
┌─────────────────────────────────────────────────────────────┐
│ FID 详解 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 定义:用户首次交互到浏览器开始处理事件的时间 │
│ │
│ 交互类型: │
│ - 点击 │
│ - 触摸 │
│ - 按键 │
│ │
│ 影响 FID 的因素: │
│ 1. 长任务阻塞主线程 │
│ 2. 大型 JavaScript 包 │
│ 3. JavaScript 执行时间 │
│ │
│ 优化建议: │
│ - 减少 JavaScript 体积 │
│ - 代码分割 │
│ - 使用 Web Worker │
│ - 延迟加载非关键 JS │
│ - 减少主线程工作 │
│ │
└─────────────────────────────────────────────────────────────┘
CLS (Cumulative Layout Shift) #
text
┌─────────────────────────────────────────────────────────────┐
│ CLS 详解 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 定义:页面整个生命周期内所有意外布局偏移的总和 │
│ │
│ 常见原因: │
│ 1. 无尺寸的图片 │
│ 2. 动态插入内容 │
│ 3. 网络字体加载 │
│ 4. 动画效果 │
│ │
│ 优化建议: │
│ - 为图片设置宽高 │
│ - 预留广告位空间 │
│ - 使用 font-display: optional │
│ - 避免在已有内容上方插入内容 │
│ - 使用 transform 动画 │
│ │
└─────────────────────────────────────────────────────────────┘
其他性能指标 #
页面加载指标 #
text
┌─────────────────────────────────────────────────────────────┐
│ 页面加载指标 │
├─────────────────────────────────────────────────────────────┤
│ │
│ FP (First Paint) │
│ 首次绘制 │
│ - 测量:首次像素渲染时间 │
│ - 目标:< 1 秒 │
│ │
│ FCP (First Contentful Paint) │
│ 首次内容绘制 │
│ - 测量:首次内容渲染时间 │
│ - 目标:< 1.8 秒 │
│ │
│ TTFB (Time to First Byte) │
│ 首字节时间 │
│ - 测量:从请求到收到首个字节的时间 │
│ - 目标:< 600ms │
│ │
│ DOMContentLoaded │
│ DOM 内容加载完成 │
│ - 测量:HTML 解析完成时间 │
│ │
│ Load │
│ 页面完全加载 │
│ - 测量:所有资源加载完成时间 │
│ │
└─────────────────────────────────────────────────────────────┘
交互性能指标 #
text
┌─────────────────────────────────────────────────────────────┐
│ 交互性能指标 │
├─────────────────────────────────────────────────────────────┤
│ │
│ TTI (Time to Interactive) │
│ 可交互时间 │
│ - 测量:页面完全可交互时间 │
│ - 目标:< 3.8 秒 │
│ │
│ TBT (Total Blocking Time) │
│ 总阻塞时间 │
│ - 测量:FCP 和 TTI 之间主线程阻塞时间 │
│ - 目标:< 200ms │
│ │
│ SI (Speed Index) │
│ 速度指数 │
│ - 测量:内容填充速度 │
│ - 目标:< 3.4 秒 │
│ │
└─────────────────────────────────────────────────────────────┘
LogRocket 性能仪表板 #
仪表板概览 #
text
┌─────────────────────────────────────────────────────────────┐
│ 性能仪表板 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Core Web Vitals 概览 │ │
│ │ │ │
│ │ LCP: 2.1s ✅ FID: 85ms ✅ CLS: 0.05 ✅ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 性能趋势图 │ │
│ │ │ │
│ │ [LCP 趋势] [FID 趋势] [CLS 趋势] │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 页面性能详情 │ │
│ │ │ │
│ │ 页面 URL LCP FID CLS 会话数 │ │
│ │ /home 2.1s 85ms 0.05 1,234 │ │
│ │ /products 3.2s 120ms 0.08 567 │ │
│ │ /checkout 4.5s 200ms 0.12 89 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
按页面分析 #
text
┌─────────────────────────────────────────────────────────────┐
│ 页面性能分析 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 功能: │
│ - 查看每个页面的性能指标 │
│ - 识别性能最差的页面 │
│ - 分析性能趋势 │
│ - 对比不同版本的性能 │
│ │
│ 使用场景: │
│ 1. 找出需要优化的页面 │
│ 2. 验证优化效果 │
│ 3. 监控性能回归 │
│ │
└─────────────────────────────────────────────────────────────┘
按用户分析 #
text
┌─────────────────────────────────────────────────────────────┐
│ 用户性能分析 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 分析维度: │
│ - 设备类型(桌面/移动) │
│ - 浏览器类型 │
│ - 地理位置 │
│ - 网络类型 │
│ │
│ 使用场景: │
│ 1. 识别特定设备/浏览器的性能问题 │
│ 2. 针对性优化 │
│ 3. 分析慢速网络下的表现 │
│ │
└─────────────────────────────────────────────────────────────┘
网络请求性能 #
请求监控 #
text
┌─────────────────────────────────────────────────────────────┐
│ 网络请求监控 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 监控内容: │
│ │
│ 1. 请求时间 │
│ - DNS 查询时间 │
│ - TCP 连接时间 │
│ - SSL 握手时间 │
│ - 请求发送时间 │
│ - 等待响应时间 (TTFB) │
│ - 内容下载时间 │
│ │
│ 2. 请求详情 │
│ - URL │
│ - 方法 (GET/POST/...) │
│ - 状态码 │
│ - 请求/响应大小 │
│ │
│ 3. 请求瀑布图 │
│ - 请求顺序 │
│ - 并行请求 │
│ - 阻塞关系 │
│ │
└─────────────────────────────────────────────────────────────┘
慢请求分析 #
javascript
// 在会话中查看慢请求
// LogRocket 自动标记响应时间超过阈值的请求
// 常见慢请求原因:
// 1. 后端处理慢
// 2. 数据库查询慢
// 3. 网络延迟
// 4. 大数据传输
// 5. 缺少缓存
API 性能分析 #
text
┌─────────────────────────────────────────────────────────────┐
│ API 性能分析 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 分析维度: │
│ │
│ 1. 响应时间分布 │
│ - P50: 50% 请求的响应时间 │
│ - P90: 90% 请求的响应时间 │
│ - P95: 95% 请求的响应时间 │
│ - P99: 99% 请求的响应时间 │
│ │
│ 2. 错误率 │
│ - 4xx 错误比例 │
│ - 5xx 错误比例 │
│ - 超时比例 │
│ │
│ 3. 请求量 │
│ - 每分钟请求数 │
│ - 峰值请求量 │
│ │
└─────────────────────────────────────────────────────────────┘
资源加载性能 #
资源瀑布图 #
text
┌─────────────────────────────────────────────────────────────┐
│ 资源瀑布图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 资源类型: │
│ - HTML 文档 │
│ - CSS 样式表 │
│ - JavaScript 文件 │
│ - 图片 │
│ - 字体 │
│ - 其他资源 │
│ │
│ 分析要点: │
│ 1. 关键路径资源 │
│ - 阻塞渲染的资源 │
│ - 需要优先加载 │
│ │
│ 2. 资源大小 │
│ - 大文件需要优化 │
│ - 考虑压缩 │
│ │
│ 3. 加载顺序 │
│ - 是否有延迟加载 │
│ - 是否有预加载 │
│ │
└─────────────────────────────────────────────────────────────┘
资源优化建议 #
text
┌─────────────────────────────────────────────────────────────┐
│ 资源优化建议 │
├─────────────────────────────────────────────────────────────┤
│ │
│ JavaScript: │
│ - 代码分割 │
│ - Tree Shaking │
│ - 压缩混淆 │
│ - 延迟加载 │
│ │
│ CSS: │
│ - 提取关键 CSS │
│ - 压缩 CSS │
│ - 移除未使用的样式 │
│ │
│ 图片: │
│ - 使用 WebP 格式 │
│ - 图片压缩 │
│ - 响应式图片 │
│ - 懒加载 │
│ │
│ 字体: │
│ - font-display: swap │
│ - 子集化 │
│ - 预加载关键字体 │
│ │
└─────────────────────────────────────────────────────────────┘
性能告警 #
配置性能告警 #
javascript
// LogRocket 支持配置性能阈值告警
// 在 LogRocket 控制台配置
// 示例告警规则:
{
"name": "LCP 超过阈值",
"condition": {
"metric": "LCP",
"threshold": 4000,
"aggregation": "p95",
"timeWindow": "1h"
},
"actions": [
{
"type": "email",
"recipients": ["dev-team@example.com"]
},
{
"type": "slack",
"channel": "#performance-alerts"
}
]
}
告警类型 #
text
┌─────────────────────────────────────────────────────────────┐
│ 性能告警类型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Core Web Vitals 告警: │
│ - LCP 超过阈值 │
│ - FID 超过阈值 │
│ - CLS 超过阈值 │
│ │
│ 页面加载告警: │
│ - 页面加载时间过长 │
│ - 资源加载失败 │
│ │
│ API 性能告警: │
│ - API 响应时间过长 │
│ - API 错误率过高 │
│ │
│ 趋势告警: │
│ - 性能指标持续恶化 │
│ - 与上一周期对比 │
│ │
└─────────────────────────────────────────────────────────────┘
性能优化实战 #
1. LCP 优化案例 #
text
┌─────────────────────────────────────────────────────────────┐
│ LCP 优化案例 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 问题:首页 LCP = 4.5s │
│ │
│ 分析: │
│ 1. 查看会话回放 │
│ 2. 分析资源瀑布图 │
│ 3. 发现英雄图片过大(5MB) │
│ │
│ 解决方案: │
│ 1. 图片压缩到 500KB │
│ 2. 使用 WebP 格式 │
│ 3. 添加图片预加载 │
│ │
│ 结果:LCP 降低到 2.1s │
│ │
└─────────────────────────────────────────────────────────────┘
2. FID 优化案例 #
text
┌─────────────────────────────────────────────────────────────┐
│ FID 优化案例 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 问题:搜索页面 FID = 350ms │
│ │
│ 分析: │
│ 1. 查看会话回放 │
│ 2. 发现大型 JS 包阻塞主线程 │
│ 3. 首次交互时 JS 正在执行 │
│ │
│ 解决方案: │
│ 1. 代码分割,延迟加载非关键 JS │
│ 2. 使用 Web Worker 处理复杂计算 │
│ 3. 优化第三方脚本 │
│ │
│ 结果:FID 降低到 80ms │
│ │
└─────────────────────────────────────────────────────────────┘
3. CLS 优化案例 #
text
┌─────────────────────────────────────────────────────────────┐
│ CLS 优化案例 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 问题:产品列表页 CLS = 0.35 │
│ │
│ 分析: │
│ 1. 查看会话回放 │
│ 2. 发现图片加载导致布局偏移 │
│ 3. 广告动态插入导致偏移 │
│ │
│ 解决方案: │
│ 1. 为图片设置固定宽高 │
│ 2. 预留广告位空间 │
│ 3. 使用 aspect-ratio CSS 属性 │
│ │
│ 结果:CLS 降低到 0.05 │
│ │
└─────────────────────────────────────────────────────────────┘
性能监控最佳实践 #
1. 建立性能基线 #
text
┌─────────────────────────────────────────────────────────────┐
│ 建立性能基线 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 步骤: │
│ │
│ 1. 收集当前性能数据 │
│ - 至少收集 2 周数据 │
│ - 记录 P50/P90/P95/P99 │
│ │
│ 2. 设定性能目标 │
│ - 基于 Core Web Vitals 标准 │
│ - 考虑业务需求 │
│ │
│ 3. 建立监控仪表板 │
│ - 关键指标可视化 │
│ - 趋势分析 │
│ │
│ 4. 配置告警 │
│ - 超过阈值时通知 │
│ - 性能回归时通知 │
│ │
└─────────────────────────────────────────────────────────────┘
2. 持续监控 #
text
┌─────────────────────────────────────────────────────────────┐
│ 持续监控 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 日常监控: │
│ - 每日查看性能仪表板 │
│ - 关注告警通知 │
│ - 分析异常会话 │
│ │
│ 发布监控: │
│ - 发布前记录性能基线 │
│ - 发布后对比性能变化 │
│ - 发现回归及时修复 │
│ │
│ 定期分析: │
│ - 每周性能报告 │
│ - 每月深度分析 │
│ - 季度优化计划 │
│ │
└─────────────────────────────────────────────────────────────┘
3. 性能预算 #
javascript
// 配置性能预算
const performanceBudget = {
lcp: 2500,
fid: 100,
cls: 0.1,
fcp: 1800,
tti: 3800,
bundleSize: {
javascript: 300 * 1024,
css: 50 * 1024,
images: 500 * 1024
}
};
// 在 CI/CD 中检查性能预算
// 如果超过预算,构建失败
下一步 #
现在你已经掌握了性能监控的使用方法,接下来学习 错误追踪 了解如何高效追踪和分析前端错误!
最后更新:2026-03-29