如何在Debian中进行JS性能测试
小樊
33
2025-12-28 03:05:51
在 Debian 上进行 JS 性能测试
一 环境准备与工具安装
- 安装 Node.js 与 npm(示例为 16.x,可按需调整版本):
- curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
- sudo apt-get install -y nodejs
- 常用测试与监控工具:
- sudo apt-get install -y apache2-utils wrk htop sysstat
- npm install -g benchmark.js artillery heapdump lighthouse
- 验证:node -v、npm -v 能正常输出版本号。
二 代码级基准测试
- 使用 perf_hooks 精确计时(毫秒级):
- const { performance } = require(‘perf_hooks’);
const start = performance.now();
// 待测代码
for (let i = 0; i < 1e7; i++) {}
const end = performance.now();
console.log(
执行时间: ${end - start} ms);
- 运行:node test.js
- 使用 Benchmark.js 做统计意义的基准对比:
- const Benchmark = require(‘benchmark’);
new Benchmark.Suite()
.add(‘字符串替换’, () => ‘hello’.replace(/./g, ‘x’))
.on(‘complete’, function() {
console.log(this.map(x => x.toString()).join(‘\n’));
})
.run({ async: true });
- 运行:node benchmark.js。
三 HTTP 负载与并发测试
- ApacheBench(ab):快速单接口压测
- ab -n 1000 -c 10 http://localhost:3000/
- 关注指标:Requests per second(QPS)、Time per request
- wrk:高并发、长时压测
- wrk -t12 -c400 -d30s http://localhost:3000
- 关注指标:Requests/sec、Latency
- Artillery:复杂场景与协议(REST/WebSocket)
- 示例 scenarios.yml:
- config: { target: “http://localhost:3000”, phases: [{ duration: 60, arrivalRate: 10 }] }
- scenarios: [{ flow: [{ get: { url: “/” } }] }]
- 运行:artillery run scenarios.yml。
四 内存与 CPU 瓶颈定位
- Chrome DevTools Performance 面板(前端或 Node 通过 --inspect 远程调试)
- 启动:node --inspect-brk server.js
- 打开 chrome://inspect → 进入 Performance 录制“加载”或“运行时”性能
- 关注:Main 线程长任务(>50ms)、火焰图、FPS、CPU/Network 节流(建议 4x slowdown 模拟移动端)
- 内存快照与泄漏排查
- npm install heapdump
- 在代码中引入并按需触发:const heapdump = require(‘heapdump’); heapdump.writeSnapshot(‘./heapdump.heapsnapshot’);
- 用 DevTools Memory 面板加载快照对比,定位 Detached DOM、闭包引用 等泄漏点
- 系统级监控
- htop(CPU/内存)、vmstat/iostat(系统资源)观察压测过程中的资源瓶颈。
五 一套可复用的测试流程
- 明确目标:聚焦 吞吐量(QPS)、P95/P99 延迟、长任务、内存泄漏 等核心指标
- 准备稳定版本:在 干净的 Debian 环境 部署被测服务,避免插件/扩展干扰
- 基线测量:先用 perf_hooks/Benchmark.js 找到热点函数与稳定基线
- 负载测试:用 ab/wrk/Artillery 逐步加压(如并发从低到高),记录 QPS/延迟/错误率 曲线
- 瓶颈定位:结合 DevTools Performance/内存快照 与 htop/vmstat 找到 CPU/内存/渲染瓶颈
- 优化回归:实施优化后按相同脚本复测,确保指标改善且无明显副作用
- 持续监控:上线后接入 Sentry 等线上监控,持续跟踪真实用户性能表现。