How come Q deferreds are so slow on Node.js?
deferred, node.js, promise, q
Solution
The reasons I'm aware of, are:
Q uses Object.freeze, and that slows V8 by magnitudes
Many nextTick calls (already mentioned in comments). This however shouldn't be that much of the case with latest Node.js version (v0.10), as there nextTick overhead is minimal.
Problem
So I created this simple test server in Node.js Whenever I do a direct response, I get 2200 requests/second (fast!). When I only wrap a simple Q deferred around it, it drops to 580 requests/second (4 times slower!). Can anybody explain that huge difference? ``` // 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); ```