e09bfde8489386583093f058ca15ff13e50a15de
[platform/framework/web/crosswalk-tizen.git] /
1 'use strict';
2
3 // Benchmark comparing performance of event emit for many listeners
4 // To run it, do following in memoizee package path:
5 //
6 // $ npm install eventemitter2 signals
7 // $ node benchmark/many-on.js
8
9 var forEach    = require('es5-ext/object/for-each')
10   , pad        = require('es5-ext/string/#/pad')
11
12   , now = Date.now
13
14   , time, count = 1000000, i, data = {}
15   , ee, native, ee2, signals, a = {}, b = {};
16
17 ee = (function () {
18         var ee = require('../')();
19         ee.on('test', function () { return arguments; });
20         ee.on('test', function () { return arguments; });
21         return ee.on('test', function () { return arguments; });
22 }());
23
24 native = (function () {
25         var ee = require('events');
26         ee = new ee.EventEmitter();
27         ee.on('test', function () { return arguments; });
28         ee.on('test', function () { return arguments; });
29         return ee.on('test', function () { return arguments; });
30 }());
31
32 ee2 = (function () {
33         var ee = require('eventemitter2');
34         ee = new ee.EventEmitter2();
35         ee.on('test', function () { return arguments; });
36         ee.on('test', function () { return arguments; });
37         return ee.on('test', function () { return arguments; });
38 }());
39
40 signals = (function () {
41         var Signal = require('signals')
42           , ee = { test: new Signal() };
43         ee.test.add(function () { return arguments; });
44         ee.test.add(function () { return arguments; });
45         ee.test.add(function () { return arguments; });
46         return ee;
47 }());
48
49 console.log("Emit for 3 listeners", "x" + count + ":\n");
50
51 i = count;
52 time = now();
53 while (i--) {
54         ee.emit('test', a, b);
55 }
56 data["event-emitter (this implementation)"] = now() - time;
57
58 i = count;
59 time = now();
60 while (i--) {
61         native.emit('test', a, b);
62 }
63 data["EventEmitter (Node.js native)"] = now() - time;
64
65 i = count;
66 time = now();
67 while (i--) {
68         ee2.emit('test', a, b);
69 }
70 data.EventEmitter2 = now() - time;
71
72 i = count;
73 time = now();
74 while (i--) {
75         signals.test.dispatch(a, b);
76 }
77 data.Signals = now() - time;
78
79 forEach(data, function (value, name, obj, index) {
80         console.log(index + 1 + ":",  pad.call(value, " ", 5), name);
81 }, null, function (a, b) {
82         return this[a] - this[b];
83 });