|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var fs = require('fs') |
|
, clarinet = require('../clarinet') |
|
, Parser = require('jsonparse') |
|
, jsonparser |
|
, p |
|
, s |
|
, start |
|
, max = process.argv[3] || 1 |
|
, n = process.argv[4] || 9 |
|
, averages = {} |
|
; |
|
|
|
function update_averages(what, time) { |
|
if(averages[what]) { |
|
averages[what].n++; |
|
averages[what].time = averages[what].time + time; |
|
} |
|
else averages[what] = {n: 1, time: time}; |
|
} |
|
|
|
console.log('=N("node bench/async.js ' + process.argv[2] + ' ' + |
|
max + ' ' + n + '")'); |
|
console.log('=N("clp (clarinet parser), cls (clarinet event emitter)")'); |
|
|
|
|
|
function stream_bench(cb) { |
|
s = clarinet.createStream(); |
|
s.on('end', function () { |
|
var exectime = Date.now()-start; |
|
console.log('cls, %s', exectime); |
|
update_averages('cls', exectime); |
|
cb(); |
|
}); |
|
var fs_read = fs.createReadStream(process.argv[2]); |
|
fs_read.setEncoding('utf-8'); |
|
fs_read.on('data', function(chunk) { |
|
for (var i = 0; i < max; i++) s.write(chunk); |
|
}); |
|
fs_read.on('end', function () { s.end(); }); |
|
start = Date.now(); |
|
} |
|
|
|
function parser_bench(cb) { |
|
p = clarinet.parser(); |
|
p.onend = function () { |
|
var exectime = Date.now()-start; |
|
console.log('clp, %s', exectime); |
|
update_averages('clp', exectime); cb(); |
|
}; |
|
var fs_read = fs.createReadStream(process.argv[2]); |
|
fs_read.setEncoding('utf-8'); |
|
fs_read.on('data', function(chunk) { |
|
for (var i = 0; i < max; i++) p.write(chunk); |
|
}); |
|
fs_read.on('end', function () { |
|
p.end(); |
|
if(n===0) process.exit(); |
|
n--; |
|
setTimeout(repeat,0); |
|
}); |
|
start = Date.now(); |
|
} |
|
|
|
function repeat() { |
|
stream_bench(function () { |
|
return parser_bench(function(){ }); }); |
|
} |
|
|
|
function output_avg() { |
|
console.log('=N("# Version")'); |
|
console.log('=N("' + JSON.stringify(process.versions).replace(/"/g, "'") + '")'); |
|
console.log('=N("# Summary")'); |
|
for(var k in averages) { |
|
console.log('=N("* %s [%s]: %s ms")', k, averages[k].n, |
|
averages[k].time/averages[k].n); |
|
} |
|
} |
|
|
|
process.on('SIGINT', function () { |
|
output_avg(); |
|
process.exit(1); |
|
}); |
|
|
|
process.on('exit', output_avg); |
|
|
|
repeat(); |