bench.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. 'use strict';
  2. const mpath = require('./');
  3. const Bench = require('benchmark');
  4. require('child_process').exec('git log --pretty=format:\'%h\' -n 1', function(err, sha) {
  5. if (err) throw err;
  6. const fs = require('fs');
  7. const filename = __dirname + '/bench.out';
  8. const out = fs.createWriteStream(filename, { flags: 'a', encoding: 'utf8' });
  9. /**
  10. * test doc creator
  11. */
  12. function doc() {
  13. const o = { first: { second: { third: [3, { name: 'aaron' }, 9] } } };
  14. o.comments = [
  15. { name: 'one' },
  16. { name: 'two', _doc: { name: '2' } },
  17. { name: 'three',
  18. comments: [{}, { comments: [{ val: 'twoo' }] }],
  19. _doc: { name: '3', comments: [{}, { _doc: { comments: [{ val: 2 }] } }] } }
  20. ];
  21. o.name = 'jiro';
  22. o.array = [
  23. { o: { array: [{ x: { b: [4, 6, 8] } }, { y: 10 }] } },
  24. { o: { array: [{ x: { b: [1, 2, 3] } }, { x: { z: 10 } }, { x: { b: 'hi' } }] } },
  25. { o: { array: [{ x: { b: null } }, { x: { b: [null, 1] } }] } },
  26. { o: { array: [{ x: null }] } },
  27. { o: { array: [{ y: 3 }] } },
  28. { o: { array: [3, 0, null] } },
  29. { o: { name: 'ha' } }
  30. ];
  31. o.arr = [
  32. { arr: [{ a: { b: 47 } }, { a: { c: 48 } }, { d: 'yep' }] },
  33. { yep: true }
  34. ];
  35. return o;
  36. }
  37. const o = doc();
  38. const s = new Bench.Suite;
  39. s.add('mpath.get("first", obj)', function() {
  40. mpath.get('first', o);
  41. });
  42. s.add('mpath.get("first.second", obj)', function() {
  43. mpath.get('first.second', o);
  44. });
  45. s.add('mpath.get("first.second.third.1.name", obj)', function() {
  46. mpath.get('first.second.third.1.name', o);
  47. });
  48. s.add('mpath.get("comments", obj)', function() {
  49. mpath.get('comments', o);
  50. });
  51. s.add('mpath.get("comments.1", obj)', function() {
  52. mpath.get('comments.1', o);
  53. });
  54. s.add('mpath.get("comments.2.name", obj)', function() {
  55. mpath.get('comments.2.name', o);
  56. });
  57. s.add('mpath.get("comments.2.comments.1.comments.0.val", obj)', function() {
  58. mpath.get('comments.2.comments.1.comments.0.val', o);
  59. });
  60. s.add('mpath.get("comments.name", obj)', function() {
  61. mpath.get('comments.name', o);
  62. });
  63. s.add('mpath.set("first", obj, val)', function() {
  64. mpath.set('first', o, 1);
  65. });
  66. s.add('mpath.set("first.second", obj, val)', function() {
  67. mpath.set('first.second', o, 1);
  68. });
  69. s.add('mpath.set("first.second.third.1.name", obj, val)', function() {
  70. mpath.set('first.second.third.1.name', o, 1);
  71. });
  72. s.add('mpath.set("comments", obj, val)', function() {
  73. mpath.set('comments', o, 1);
  74. });
  75. s.add('mpath.set("comments.1", obj, val)', function() {
  76. mpath.set('comments.1', o, 1);
  77. });
  78. s.add('mpath.set("comments.2.name", obj, val)', function() {
  79. mpath.set('comments.2.name', o, 1);
  80. });
  81. s.add('mpath.set("comments.2.comments.1.comments.0.val", obj, val)', function() {
  82. mpath.set('comments.2.comments.1.comments.0.val', o, 1);
  83. });
  84. s.add('mpath.set("comments.name", obj, val)', function() {
  85. mpath.set('comments.name', o, 1);
  86. });
  87. s.on('start', function() {
  88. console.log('starting...');
  89. out.write('*' + sha + ': ' + String(new Date()) + '\n');
  90. });
  91. s.on('cycle', function(e) {
  92. const s = String(e.target);
  93. console.log(s);
  94. out.write(s + '\n');
  95. });
  96. s.on('complete', function() {
  97. console.log('done');
  98. out.end('');
  99. });
  100. s.run();
  101. });