Więc stworzyłem ten prosty serwer testowy w Node.js
Zawsze, gdy robię bezpośrednią odpowiedź, otrzymuję żądań/sekundę (szybko!). Kiedy tylko zawijam prostą Q odroczoną wokół niego, to spada do żądań/sekundę (4 razy wolniej!). Czy ktoś może wyjaśnić tę ogromną różnicę?Jak to się dzieje, że opóźnienia Q są tak powolne w Node.js?
// 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);
Najwyraźniej obietnice Q są naprawdę powolne, po prostu czytam [to] (http://dailyjs.com/2013/03/27/node-roundup/), które wspomina o bibliotece [Vow library] (https: // github. com/dfilatov/jspromise), która najwyraźniej jest ~ 50-krotnie szybsza niż Q. – robertklep
Sprawdzam również https://github.com/medikoo/deferred, i wydaje się, że nie ma też żadnego obciążenia (uzyskanie 2200 reqs/second constant). Jestem naprawdę ciekawy, dlaczego Q jest tak powolny ... –
Przeglądając kod zauważam, że używa on 'process.nextTick()' dużo, co może znacznie spowolnić proces. – robertklep