VSCode中JS性能测试不能用Code Runner因其仅单次执行、无采样与GC控制;轻量测试可用console.time()但精度低且受优化影响;可靠测试应选tinybench或benchmark.js;真实场景需结合Live Server与Puppeteer在浏览器中测量。

VSCode里跑JS性能测试,为什么不能直接用Code Runner
因为Code Runner默认只执行一次脚本、不支持重复采样、没法控制GC时机,更不会输出执行时间分布——它本质是快速预览工具,不是性能测试工具。你用它测JSON.parse()和JSON.stringify()的耗时差异,结果可能差20%,纯属噪音干扰。
用console.time() + console.timeEnd()做轻量级基准测试
适合单函数、短逻辑、无副作用的场景,比如对比两种数组去重写法。但要注意:console.time()在Node.js中精度只有毫秒级,且受V8优化影响大,多次运行结果波动明显。
- 必须在同一上下文里成对调用,否则
timeEnd会报Timer "xxx" doesn't exist - 避免在循环内反复调用,改用
for外层包裹+手动计数 - 加
global.gc()(需启动--expose-gc)强制垃圾回收,减少内存抖动干扰 - 示例:
node --expose-gc index.js
,代码里写global.gc(); console.time('map'); arr.map(...); console.timeEnd('map');
需要可靠数据?上benchmark.js或tinybench
benchmark.js成熟但依赖多、配置重;tinybench轻量(仅4KB)、API简洁、自带统计(mean、stddev、rme),更适合VSCode内快速验证。
- 安装:
npm install --save-dev tinybench - 写
bench.js,用const bench = new Bench()注册多个.add()任务 - 关键参数:
time: 100(最少运行100ms)、iterations: 10(至少10轮),避免单次抖动主导结果 - VSCode里右键→“Run Code”会失败,必须用终端:
node bench.js;若想F5调试,得在launch.json里设"program": "${workspaceFolder}/bench.js"
测真实用户场景?别只跑Node,得搭Live Server + Puppeteer
Node环境测不出DOM操作、CSS渲染、布局抖动的真实开销。比如测一个requestAnimationFrame动画函数,必须在浏览器里跑才有意义。
- 用
Live Server插件起本地服务(http://localhost:5500) -
Puppeteer连这个地址,用page.evaluate()注入待测JS,再用performance.mark()/measure()抓取高精度时间戳 - 注意:Puppeteer默认禁用缓存,但真实用户有CDN、HTTP/2复用,测试前要
await page.setRequestInterception(true)模拟 - VSCode里调试Puppeteer脚本,
launch.json里必须加"env": {"NODE_OPTIONS": "--inspect"},否则断点不生效
性能测试真正难的不是工具链,而是控制变量——Node版本、V8 flags、CPU频率、甚至终端字体渲染都可能让结果偏移5%以上。别信单次跑分,信三次以上标准差小于2%的数据。



















