不是说 Node 12 又快很多了吗,这是错觉?
测试代码
const http = require("http");
const fs = require("fs");
const path = require("path");
const port = 3000;
function sleep(ms) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, ms);
});
}
http
.createServer(async function(request, response) {
await sleep(200);
response.end("Hello, world!");
})
.listen(port);
console.log(`listen http://localhost:${port}/`);
Node v10.15.3
> siege -c 100 -t 10s http://127.0.0.1:3000/
Transactions: 4193 hits
Availability: 100.00 %
Elapsed time: 9.83 secs
Data transferred: 0.05 MB
Response time: 0.23 secs
Transaction rate: 426.55 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 98.04
Successful transactions: 4200
Failed transactions: 0
Longest transaction: 0.26
Shortest transaction: 0.20
Node v12.0.0
> siege -c 100 -t 10s http://127.0.0.1:3000/
Transactions: 3809 hits
Availability: 100.00 %
Elapsed time: 9.10 secs
Data transferred: 0.05 MB
Response time: 0.23 secs
Transaction rate: 418.57 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 96.55
Successful transactions: 3809
Failed transactions: 0
Longest transaction: 0.26
Shortest transaction: 0.20
2 回复
我的理解是,https://github.com/nodejs/llhttp 这个提升的是 req 和 req 解析能力,你这个测试里面的请求和响应体都很小,估计看不出差别。 另,压测的话,client 和 server 最好不要在一台电脑上,会有竞争。
这几乎纯粹是在测libuv以及操作系统socket接口的速度吧。
Node有很多测试项,每个测试项得单独看,做高并发网络服务的话平时个人比较看重异步执行效率,看的比较多的是Promise的测试: https://github.com/v8/promise-performance-tests 你可以对比一下12和10。
另外可以用 https://github.com/zandaqo/iswasmfast 来测试N-API、原生编译应用和WebAssembly的性能。