123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // forked from github.com/creationix/jsonparse
- // brew install yajl
- // npm install jsonparse yajl
- // node bench/async.js samples/npm.json
- // jsonfile
- 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)")');
- //console.log('=N("jpp (creationix/jsonparse)")');
- 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();
|