speed.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. var msgpack = require('node-msgpack');
  2. var bison = require('bison');
  3. var codec = {
  4. JSON: {
  5. encode: JSON.stringify,
  6. decode: JSON.parse
  7. },
  8. msgpack: {
  9. encode: msgpack.pack,
  10. decode: msgpack.unpack
  11. },
  12. bison: bison
  13. };
  14. var obj, l;
  15. var s = '0';
  16. for (var i = 0; i < 12; ++i) s += s;
  17. obj = {
  18. foo: s,
  19. arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
  20. rand: [],
  21. a: s,
  22. ccc: s,
  23. b: s + s + s
  24. };
  25. for (i = 0; i < 100; ++i) obj.rand.push(Math.random());
  26. forObj(obj);
  27. obj = {
  28. foo: s,
  29. arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
  30. rand: []
  31. };
  32. for (i = 0; i < 100; ++i) obj.rand.push(Math.random());
  33. forObj(obj);
  34. obj = {
  35. foo: s,
  36. arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
  37. rand: []
  38. };
  39. forObj(obj);
  40. obj = {
  41. arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
  42. rand: []
  43. };
  44. forObj(obj);
  45. function run(obj, codec) {
  46. var t1 = Date.now();
  47. var n = 10000;
  48. for (var i = 0; i < n; ++i) {
  49. codec.decode(l = codec.encode(obj));
  50. }
  51. var t2 = Date.now();
  52. //console.log('DONE', n*1000/(t2-t1), 'codecs/sec, length=', l.length);
  53. return [n*1000/(t2-t1), l.length];
  54. }
  55. function series(obj, cname, n) {
  56. var rate = 0;
  57. var len = 0;
  58. for (var i = 0; i < n; ++i) {
  59. var r = run(obj, codec[cname]);
  60. rate += r[0];
  61. len += r[1];
  62. }
  63. rate /= n;
  64. len /= n;
  65. console.log(cname + ' ' + rate + ' ' + len);
  66. return [rate, len];
  67. }
  68. function forObj(obj) {
  69. var r = {
  70. JSON: series(obj, 'JSON', 20),
  71. msgpack: series(obj, 'msgpack', 20),
  72. bison: series(obj, 'bison', 20)
  73. };
  74. return r;
  75. }