Skip to content

Instantly share code, notes, and snippets.

@sudsy
Created September 10, 2013 00:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sudsy/6503560 to your computer and use it in GitHub Desktop.
Save sudsy/6503560 to your computer and use it in GitHub Desktop.
Testing performance of node async functions with internal domains see: http://www.lighthouselogic.com/using-a-new-domain-for-each-async-function-in-node/
var Benchmark = require('benchmark');
var fs = require("fs");
var domain = require("domain");
var d = domain.create().on('error', function(err){ console.log("Caught" + err); process.exit();})
var j_ = 10000000;
function intensive(){
var s = 0;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
}
function readJsonWithoutTryCatchIntensive(filename, callback) {
fs.readFile(filename, function (err, content) {
if (err) {
return callback(err);
}
var data = JSON.parse(content.toString());
intensive();
return callback(null, data);
});
}
function readJsonWithInternalDomainIntensive(filename, callback) {
var d = domain.create().on('error', function(err){ return callback(err)})
fs.readFile(filename, d.intercept(function (content) {
var data = JSON.parse(content.toString());
intensive();
return callback(null, data);
}));
}
function readJsonWithInternalDomain(filename, callback) {
var d = domain.create().on('error', function(err){ return callback(err)})
fs.readFile(filename, d.intercept(function (content) {
var data = JSON.parse(content.toString());
var s = 0;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
return callback(null, data);
}));
}
function readJsonWithTryCatch(filename, callback) {
fs.readFile(filename, function (err, content) {
if (err) {
return callback(err);
}
var data = JSON.parse(content.toString());
try {
var s = 0;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
for (var i = 0; i < j_; i++) s = i;
} catch (e) {
return callback(e);
}
return callback(null, data);
});
}
var suite = new Benchmark.Suite;
// add tests
suite.add('Control (readJSONWithoutTryCatchIntensive) ', function(deferred) {
readJsonWithoutTryCatchIntensive("./test.json", function(){
deferred.resolve();
});
}, {'defer': true}).add('readJsonWithInternalDomainIntensive', function(deferred) {
readJsonWithInternalDomainIntensive("./test.json", function(){
deferred.resolve();
});
}, {'defer': true}).add('readJSONWithInternalDomain', function(deferred) {
readJsonWithInternalDomain("./test.json", function(){
deferred.resolve();
});
}, {'defer': true}).add('readJsonWithTryCatch', function(deferred) {
readJsonWithTryCatch("./test.json", function(){
deferred.resolve();
});
}, {'defer': true}).on('cycle', function(event) {
console.log(String(event.target));
}).on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
}).run({ 'async': true });
// Slow!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment