直接用 performance api 打标记是最可靠的优化验证方式,支持毫秒级精度测量、与 devtools 对齐、对比不同实现耗时;可用 mark()/measure() 定位逻辑区间耗时,performance.now() 测微小差异,performanceobserver 捕获真实场景指标,需及时清理标记防污染。

直接用 Performance API 打标记,是验证优化是否落地最可靠的方式。它不依赖外部工具,数据来自浏览器内核,毫秒级精度,还能和 DevTools 时间轴对齐,一眼看出改了哪段、省了多少。
用 performance.mark() + measure() 定位优化前后的耗时差
适合对比同一逻辑在不同实现下的执行开销,比如替换 DOM 操作方式、改用 requestIdleCallback、或启用虚拟滚动后列表渲染时间变化。
- 在优化前的代码入口和出口分别打标记,例如 performance.mark('render-list-start') 和 performance.mark('render-list-end')
- 调用 performance.measure('list-render', 'render-list-start', 'render-list-end') 计算区间耗时
- 优化后保持标记名一致,重新运行,对比 performance.getEntriesByName('list-render')[0].duration 的数值变化
- 建议在页面加载完成(window.onload)后执行,避免受资源加载干扰
用 performance.now() 测量函数级微小差异
当优化点很细(比如数组遍历改用 for-of 还是 for-loop、对象属性访问缓存与否),用高精度时间戳更敏感。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- performance.now() 返回浮点数,精度达微秒级,比 Date.now() 稳定得多
- 单次测量可能有抖动,可循环执行 10–50 次取平均值,例如:
for (let i = 0; i - 注意避开垃圾回收高峰期,避免在长任务中穿插测量
结合 PerformanceObserver 看真实用户场景下的效果
光测本地开发环境不够,上线后还要确认优化在不同设备、网络、用户行为下是否持续生效。
- 用 PerformanceObserver 监听 'navigation' 或 'paint' 类型,捕获 FCP、LCP、TTFB 等指标
- 在关键交互(如点击按钮触发重渲染)前后主动打标记,再上报到监控系统,形成“行为-标记-指标”闭环
- 例如:用户点击“加载更多”,打 performance.mark('load-more-click');列表更新完成时打 performance.mark('load-more-done');后续通过 getEntriesByType('measure') 提取真实耗时用于 A/B 对比
别忘了清理,避免测试污染生产数据
反复打点不清理,会导致 performance.getEntries() 返回大量冗余记录,影响性能分析准确性,甚至内存缓慢增长。
- 每次测量完成后,及时调用 performance.clearMarks('xxx') 和 performance.clearMeasures('xxx')
- 若做批量测试,可在开始前统一清空:performance.clearMarks(); performance.clearMeasures();
- 在开发环境开启自动清理,在生产环境按需保留关键标记即可
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










