html5性能api采集的数据需通过sendbeacon可靠上传并脱敏处理:在load后或spa路由变更时采集,过滤敏感字段,添加上下文元数据,服务端限流、分类型存储并提供聚合查询。

HTML5 性能 API(如 performance.getEntries()、performance.mark()、performance.measure())能采集页面加载、资源加载、导航、内存等关键性能指标,但这些数据默认只存在于客户端内存中。要长期分析或做监控告警,必须将日志安全上传至服务端——这不是简单发个 POST,而需兼顾完整性、时效性、隐私合规与传输稳定性。
选择合适的数据采集时机
性能数据易受生命周期影响,过早采集可能漏项,过晚可能被页面卸载中断:
- 在
window.addEventListener('load', ...)后立即采集,覆盖核心资源加载完成时刻 - 对单页应用(SPA),监听
performance.getEntriesByType('navigation')变化,结合pushState或路由变更触发采集 - 避免在
beforeunload中发起异步上传——现代浏览器已限制其执行能力;改用navigator.sendBeacon()确保卸载前可靠发出 - 对长时交互(如表单填写、视频播放),可按时间窗口节流采集(如每 10 秒聚合一次
getEntriesByType('paint')和'resource')
结构化日志并脱敏敏感字段
原始性能条目含 URL、重定向链、服务器 IP(通过 serverTiming)、用户设备指纹线索等,直接上传有隐私与安全风险:
- 统一使用
JSON.stringify(performance.getEntries(), null, 2)前先过滤:移除name中的 query string(保留路径)、清空initiatorType === 'xmlhttprequest' && entry.name的完整 URL - 对
entry.duration、entry.startTime等数值字段保留,但对entry.serverTiming中的自定义标签值做哈希或截断处理 - 添加上下文元数据:如
pageId(非 URL)、sessionId(前端生成的短 UUID)、env('prod'/'staging')、uaHash(User-Agent SHA-256 前 8 位) - 禁止包含任何用户输入、token、cookie、localStorage 键名或值
使用 sendBeacon 保障卸载场景上传
当用户关闭标签页、跳转外链或刷新页面时,常规 fetch / XHR 极大概率被终止。sendBeacon 是专为此设计的异步、无响应依赖、高优先级机制:
- 仅支持
POST,且 body 类型限于ArrayBuffer、Blob、FormData或字符串(推荐JSON.stringify(...)+Content-Type: text/plain) - 示例代码:
const data = JSON.stringify({ type: 'perf', entries: filteredEntries, ts: Date.now() });<br>navigator.sendBeacon('/api/v1/log/perf', data); - 服务端需接受
text/plain类型请求体,并正确解析 JSON;不能依赖multipart/form-data或 CORS 预检(sendBeacon 不触发 preflight) - 若需带认证头(如 Bearer token),sendBeacon 不支持设置 headers——应改用 cookie 认证,或服务端基于
Origin+Referer白名单校验
服务端接收与存储建议
前端上传只是第一步,服务端需配合设计以支撑可观测性:
- 接口限流:单 IP 或单 Session 每分钟最多接收 5 条性能日志,防刷与爆炸式上报
- 自动归类:根据
entry.entryType(如 'navigation'、'resource'、'paint')写入不同 Kafka Topic 或数据库分表 - 冷热分离:高频访问的最近 7 天数据存 SSD 数据库(如 TimescaleDB),历史数据自动转存对象存储(S3/MinIO)并压缩为 Parquet
- 提供轻量查询 API:例如
GET /api/v1/perf/summary?from=2026-06-01&to=2026-06-08&metric=FCP返回 P50/P90 分布,不暴露原始条目
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











