Puppeteer 结合 Performance API 实现自动化性能压测,核心是模拟真实加载、稳定采集指标、批量执行并汇总结果;需启用无头模式、禁用默认超时、用 networkidle2 判断静默、在 page.evaluate 中获取 navigation 条目及 FCP/LCP 等指标,多轮执行剔除异常值,JSON 导出+轻量分析,纯本地可复现。

用 Puppeteer 结合 Performance API 做自动化性能压测,核心是模拟真实浏览器加载行为、稳定采集指标、批量执行并汇总结果。这不是单纯“跑一次”,而是构建可复现、可对比、带误差控制的测试流程。
准备环境与基础脚本
先确保 Node.js(≥16)和 Puppeteer 已安装:
- npm install puppeteer(首次运行会自动下载 Chromium)
- 脚本开头启用无头模式(headless: true),生产压测必须关闭界面以节省资源
- 禁用默认超时:page.setDefaultNavigationTimeout(0),避免因网络波动中断采集
- 使用 waitUntil: 'networkidle2' 替代简单 waitForTimeout,更准确判断页面静默状态
精准采集 Performance 数据
Performance API 的数据必须在页面上下文中获取,不能直接从 Node 环境读取。关键点:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 调用 page.evaluate(() => performance.getEntries()) 获取全部资源性能条目
- 建议过滤出导航级记录:performance.getEntriesByType('navigation')[0],它包含 loadEventEnd、domContentLoadedEventEnd 等核心字段
- 若需首屏时间(FCP)、最大内容绘制(LCP)等布局指标,要显式开启:在 page.goto() 前注入 performance.setResourceTimingBufferSize(1000) 并监听 performance.measure()
多轮压测与误差控制
单次访问偏差大,必须重复多次并剔除异常值:
- 用 for 循环执行 N 次(建议 ≥5),每次新建独立 browser 实例或复用 page(复用更高效但需清缓存)
- 每次访问前加随机延时(如 Math.random() * 2000 + 1000),避免请求洪峰触发服务限流
- 采集后立即关闭 browser(或至少 page.close()),防止内存泄漏影响后续轮次
- 记录每轮的 navigationStart → loadEventEnd 总耗时,最后计算平均值、P95、标准差
导出与轻量分析
不需要引入复杂报表库,用 JSON + 小脚本即可完成闭环:
- 将每次采集的 timingData 推入数组,循环结束后用 fs.writeFileSync('report.json', JSON.stringify(results, null, 2))
- 额外写一个 analyze.js 脚本,读取 JSON 并输出关键统计(如 “FCP 中位数:1.24s,P95:2.61s”)
- 若需对比不同版本,只需分别运行两次压测,再用脚本 diff 两个 report.json 的核心字段
整个过程不依赖外部服务,纯本地执行,适合 CI 流水线集成。重点不在功能多,而在每次运行条件一致、数据可追溯、结果可验证。


















