performance api 测量函数执行时长的核心是用高精度时间戳捕获起止时刻,比 date.now() 更准且不受系统时间跳变影响;支持 performance.now() 快速单次测量和 mark()/measure() 结构化追踪,适用于调试、多阶段流程及真实用户监控。

用 Performance API 测量函数执行时长,核心是利用高精度时间戳捕获起止时刻。它比 Date.now() 更准、不受系统时间跳变影响,适合真实性能分析。
用 performance.now() 快速测单次执行
适用于简单函数、调试验证或轻量级监控:
- 调用
performance.now()获取起始时间戳(单位:毫秒,精度达微秒级) - 执行目标函数
- 再次调用
performance.now()得到结束时间戳,相减即得耗时
示例:
function calculateSum(n) {<br> return Array.from({ length: n }, (_, i) => i).reduce((a, b) => a + b, 0);<br>}<br><br>const start = performance.now();<br>calculateSum(1e6);<br>const end = performance.now();<br>console.log(`耗时: ${(end - start).toFixed(2)} ms`);用 mark() 和 measure() 做结构化追踪
适合多阶段流程、组件生命周期、或需长期归档的场景,结果可被 DevTools 可视化,也方便批量提取:
- 在函数前调用
performance.mark('start-task') - 函数执行后调用
performance.mark('end-task') - 用
performance.measure('task-name', 'start-task', 'end-task')创建测量条目 - 通过
performance.getEntriesByType('measure')获取全部测量结果
注意:标记名需唯一;多次同名 mark 会覆盖,如需保留多个,可用时间戳拼接命名。
避免常见陷阱
- 不要依赖
performance.timing—— 已废弃,改用performance.getEntriesByType('navigation')[0] - 长期运行的应用要定期清理:
performance.clearMarks()和performance.clearMeasures(),防止内存堆积 - 异步函数需在回调或
await后打结束标记,否则测的是调度开销而非实际执行 - 单次测量易受 JIT 编译、GC 等干扰,关键路径建议重复执行并取中位数或 p95 值
结合上报做持续监控
可在用户交互后、路由切换时或错误边界中收集耗时数据:
- 用
performance.getEntriesByName('task-name')提取指定测量 - 在
beforeunload或空闲时段调用navigator.sendBeacon()上报 - 字段建议包含:函数标识、耗时、设备类型、网络状态、页面路径
这样就能从真实用户行为中识别慢函数,而不是仅靠本地开发环境判断。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











