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); ```

Original source