10

そこで、Node.js でこの単純なテスト サーバーを作成しまし
た。ダイレクト レスポンスを行うたびに、1秒あたり 2200のリクエストを受け取ります (速い!)。シンプルな Q deferred だけをラップすると、 580リクエスト/秒 ( 4 倍遅くなります!)に落ちます。その大きな違いを説明できる人はいますか?

// Requires
var server = require('http');
var q = require('q');

// Start server
var http = require('http');
http.createServer(function(request, response) {

    // Comment out either of two below sections

// Without deferred
// 2200 reqs/second
response.writeHead(200, {"Content-Type": "text/html"});
response.write("test");
response.end();

// Q deferred
// 580 reqs/second
var deferred = q.defer();
deferred.promise.then(function() {
    response.writeHead(200, {"Content-Type": "text/html"});
    response.write("test");
    response.end();
});
deferred.resolve();
}).listen(1234);
4

2 に答える 2

5

私が知っている理由は次のとおりです。

  1. Q は Object.freeze を使用し、V8 を大幅に遅くします

  2. 多くの nextTick 呼び出し (コメントで既に言及されています)。ただし、最新の Node.js バージョン (v0.10) では、nextTick のオーバーヘッドが最小限であるため、これはあまり当てはまりません。

于 2013-03-28T13:13:58.160 に答える