benchmark.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. const Eventual = require('../../lib/eventual');
  2. const Benchmark = require('../../lib/utils/benchmark');
  3. var events = new Eventual();
  4. function ntokb(n) {
  5. var suffix = ["B","KB","MB","GB"];
  6. var si = 0;
  7. while( n> 1024 && si< suffix.length) {
  8. n/=1024;
  9. si++;
  10. }
  11. return n.toFixed(2) + " " +suffix[si];
  12. }
  13. var test = new Set();
  14. test.add("hello:world");
  15. if(test.has("hello:world")) {
  16. console.log("True is not reference");
  17. };
  18. function makeid()
  19. {
  20. var text = "";
  21. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  22. for( var i=0; i < 5; i++ )
  23. text += possible.charAt(Math.floor(Math.random() * possible.length));
  24. return text;
  25. }
  26. var g = events.createContext();
  27. console.log("Context MODEL: " + g.version);
  28. function createContexts() {
  29. var ncount = 1000000;
  30. var r= [];
  31. console.log("Adding",ncount,"contexts");
  32. for(var i = 0;i<ncount;i++) {
  33. r.push(events.createContext());
  34. }
  35. return r;
  36. }
  37. function stressEvents() {
  38. var ctx = events.createContext();
  39. var ctx2 = events.createContext();
  40. // 1 million
  41. var ncount = 100;
  42. console.log("Adding",ncount * ncount*ncount,"events in 2 contexts");
  43. for(var i = 0;i<ncount;i++) {
  44. // Create random contexts too
  45. var evtName = makeid();
  46. for(var j = 0;j<ncount;j++) {
  47. var n2 = evtName + ":" + makeid();
  48. for(var k = 0;k<ncount;k++) {
  49. var n3 = n2+":"+k;
  50. ctx.on(evtName,(a,b,c,evt) => {
  51. console.log("evt: " , evt);
  52. console.log("Args: " + a,b,c);
  53. });
  54. }
  55. }
  56. }
  57. // Second context
  58. console.log("Adding events to second context");
  59. for(var i = 0;i<ncount;i++) {
  60. ctx2.on('test:test',(a,b,c) => { });
  61. };
  62. return [ctx,ctx2];
  63. }
  64. function pinger() {
  65. var pingbm = new Benchmark();
  66. var pctx = events.createContext();
  67. pctx.on('c1:ping',(e) => {
  68. console.log("Pong: " + pingbm.mark(), "Contexts:",events._events.ctx.size,"Memory:",ntokb(process.memoryUsage().heapTotal));
  69. })
  70. setInterval(() => {
  71. pingbm.start();
  72. pctx.emit('c1:ping');
  73. },500);
  74. }
  75. function sequential() {
  76. // Testing done
  77. var cc = events.createContext();
  78. var cc2 = events.createContext();
  79. cc.on('hello',(e) => {
  80. e.wait();
  81. console.log("CC1 Hello will wait 1s");
  82. setTimeout(() => {
  83. e.done()
  84. },1000);
  85. });
  86. cc2.on('hello',(e) => {
  87. e.wait();
  88. console.log("cc2 Hello");
  89. setTimeout(() => {
  90. e.done();
  91. },2000);
  92. });
  93. console.log("Broadcasting hello");
  94. cc.emit('hello').done(() => {
  95. console.log("Hello called");
  96. });
  97. }
  98. pinger();
  99. console.log("Turning on stress in 10s");
  100. var contextList;
  101. setTimeout(() => {
  102. console.log("Stressing events");
  103. contextList = stressEvents();
  104. },10000);
  105. setTimeout(() => {
  106. console.log("Clearing events context");
  107. contextList.forEach(c => c.destroy())
  108. contextList = null;
  109. },20000);
  110. setTimeout(() => {
  111. contextList = createContexts();
  112. },30000);
  113. setTimeout(() => stressEvents(),40000);