performance.now() 和 performance.mark()/measure() 可高精度测代码耗时,前者适合单段调试,后者适合多阶段结构化追踪;需避免高频调用、异步标记错位、标记名重复,并定期清理,关键路径建议多次测量取中位数或p95值。

直接用 performance.now() 或 performance.mark() / performance.measure() 就能高精度测出代码真实耗时,比 Date.now() 更准、不受系统时间跳变干扰,精度可达微秒级。
用 performance.now() 快速测单段代码
适合调试验证、轻量监控或函数级粗粒度测量。它返回页面加载以来的高精度毫秒值(实际精度常达亚微秒),两次调用相减即得执行时间。
- 在目标代码前调用
performance.now()记录起点 - 执行完后立刻再调一次,相减得到耗时
- 注意:不要在循环内高频调用,避免引入额外开销
用 mark() 和 measure() 做结构化追踪
适合多阶段流程、组件生命周期、异步链路或需归档分析的场景。结果可被 Chrome DevTools 性能面板识别,也方便批量提取和上报。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 在关键节点打标记,如
performance.mark('api_start')和performance.mark('api_end') - 用
performance.measure('api_duration', 'api_start', 'api_end')创建测量条目 - 通过
performance.getEntriesByName('api_duration')或getEntriesByType('measure')获取结果,duration字段即为耗时(单位:毫秒) - 标记名需合法且尽量唯一;若重复打同名 mark,后一次会覆盖前一次
避免常见误差和资源堆积
测量本身不该成为性能负担。不规范使用可能掩盖真实问题,甚至引发内存增长或 DevTools 卡顿。
- 异步操作必须在回调或 await 后打结束标记,否则测的是调度延迟而非执行时间
- 长期运行的应用要定期清理:用
performance.clearMarks()和performance.clearMeasures() - 开发环境建议加守卫,比如只在
location.hostname === 'localhost'时启用 - 单次测量易受 JIT 编译、GC 等瞬时干扰,关键路径建议多次执行后取中位数或 p95 值
结合 PerformanceObserver 实时收集
适合自动化监控、错误边界上报或用户行为埋点,让性能数据真正落地为优化依据。
- 创建
PerformanceObserver监听'measure'类型条目 - 在回调中过滤出目标名称,提取
duration并通过navigator.sendBeacon()上报 - 上报字段建议包含:测量名、耗时、页面路径、设备类型、网络状态(如
navigator.connection.effectiveType)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










