不是说 Node 12 又快很多了吗,这是错觉?
发布于 6 年前 作者 axetroy 4612 次浏览 来自 分享

测试代码

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的性能。

回到顶部