async.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // forked from github.com/creationix/jsonparse
  2. // brew install yajl
  3. // npm install jsonparse yajl
  4. // node bench/async.js samples/npm.json
  5. // jsonfile
  6. var fs = require('fs')
  7. , clarinet = require('../clarinet')
  8. , Parser = require('jsonparse')
  9. , jsonparser
  10. , p
  11. , s
  12. , start
  13. , max = process.argv[3] || 1
  14. , n = process.argv[4] || 9
  15. , averages = {}
  16. ;
  17. function update_averages(what, time) {
  18. if(averages[what]) {
  19. averages[what].n++;
  20. averages[what].time = averages[what].time + time;
  21. }
  22. else averages[what] = {n: 1, time: time};
  23. }
  24. console.log('=N("node bench/async.js ' + process.argv[2] + ' ' +
  25. max + ' ' + n + '")');
  26. console.log('=N("clp (clarinet parser), cls (clarinet event emitter)")');
  27. //console.log('=N("jpp (creationix/jsonparse)")');
  28. function stream_bench(cb) {
  29. s = clarinet.createStream();
  30. s.on('end', function () {
  31. var exectime = Date.now()-start;
  32. console.log('cls, %s', exectime);
  33. update_averages('cls', exectime);
  34. cb();
  35. });
  36. var fs_read = fs.createReadStream(process.argv[2]);
  37. fs_read.setEncoding('utf-8');
  38. fs_read.on('data', function(chunk) {
  39. for (var i = 0; i < max; i++) s.write(chunk);
  40. });
  41. fs_read.on('end', function () { s.end(); });
  42. start = Date.now();
  43. }
  44. function parser_bench(cb) {
  45. p = clarinet.parser();
  46. p.onend = function () {
  47. var exectime = Date.now()-start;
  48. console.log('clp, %s', exectime);
  49. update_averages('clp', exectime); cb();
  50. };
  51. var fs_read = fs.createReadStream(process.argv[2]);
  52. fs_read.setEncoding('utf-8');
  53. fs_read.on('data', function(chunk) {
  54. for (var i = 0; i < max; i++) p.write(chunk);
  55. });
  56. fs_read.on('end', function () {
  57. p.end();
  58. if(n===0) process.exit();
  59. n--;
  60. setTimeout(repeat,0);
  61. });
  62. start = Date.now();
  63. }
  64. function repeat() {
  65. stream_bench(function () {
  66. return parser_bench(function(){ }); });
  67. }
  68. function output_avg() {
  69. console.log('=N("# Version")');
  70. console.log('=N("' + JSON.stringify(process.versions).replace(/"/g, "'") + '")');
  71. console.log('=N("# Summary")');
  72. for(var k in averages) {
  73. console.log('=N("* %s [%s]: %s ms")', k, averages[k].n,
  74. averages[k].time/averages[k].n);
  75. }
  76. }
  77. process.on('SIGINT', function () {
  78. output_avg();
  79. process.exit(1);
  80. });
  81. process.on('exit', output_avg);
  82. repeat();