-
Notifications
You must be signed in to change notification settings - Fork 0
/
perf.ts
145 lines (120 loc) · 3.24 KB
/
perf.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import { event, listen } from '.'
import { performance } from 'perf_hooks'
import EventEmitter from 'events'
let counter: number, events, stamp, time
//
// evemin events performance test
//
const evemin_events_test = () => {
events = [0,1,2,3,4,5,6,7,8,9].map(() => {
const ev = event<number>()
listen(ev, (v) => counter+=v)
listen(ev, (v) => counter+=v)
return ev
})
counter = 0
stamp = performance.now()
for (let i = 0; i < 1000; i++) {
for (let j = 0; j < 10; j++) {
events[j](1)
}
}
time = performance.now() - stamp
console.log(`evemin events \t${counter} times per ${Math.round(time * 100) / 100}s`)
}
//
// plain javascript functions performance test
//
const plain_functions_test = () => {
events = [0,1,2,3,4,5,6,7,8,9].map(() => {
const fn_1 = (v: number) => counter+=v
const fn_2 = (v: number) => counter+=v
return (v: number) => {
fn_1(v)
fn_2(v)
}
})
counter = 0
stamp = performance.now()
for (let i = 0; i < 1000; i++) {
for (let j = 0; j < 10; j++) {
events[j](1)
}
}
time = performance.now() - stamp
console.log(`js functions \t${counter} times per ${Math.round(time * 100) / 100}s`)
}
//
// node event emitter performance test
//
const node_event_emitter_test = () => {
const emitter = new EventEmitter();
events = [0,1,2,3,4,5,6,7,8,9].map((n) => {
const name = String(n)
emitter.on(name, (v: number) => counter+=v)
emitter.on(name, (v: number) => counter+=v)
return name
})
counter = 0
stamp = performance.now()
for (let i = 0; i < 1000; i++) {
for (let j = 0; j < 10; j++) {
emitter.emit(events[j], 1)
}
}
time = performance.now() - stamp
console.log(`event emitter \t${counter} times per ${Math.round(time * 100) / 100}s`)
}
//
// Run
//
console.log('plain functions test')
for (let i = 0; i < 10; i++) {
plain_functions_test()
}
console.log('evemin events test')
for (let i = 0; i < 10; i++) {
evemin_events_test()
}
console.log('node event emitter test')
for (let i = 0; i < 10; i++) {
node_event_emitter_test()
}
//
// Result
//
/*
plain functions test
js functions 20000 times per 0.7s
js functions 20000 times per 0.23s
js functions 20000 times per 0.17s
js functions 20000 times per 0.17s
js functions 20000 times per 0.18s
js functions 20000 times per 0.18s
js functions 20000 times per 0.17s
js functions 20000 times per 0.18s
js functions 20000 times per 0.17s
js functions 20000 times per 0.18s
evemin events test
evemin events 20000 times per 1.02s
evemin events 20000 times per 0.4s
evemin events 20000 times per 0.34s
evemin events 20000 times per 0.27s
evemin events 20000 times per 0.26s
evemin events 20000 times per 0.26s
evemin events 20000 times per 0.26s
evemin events 20000 times per 0.26s
evemin events 20000 times per 0.26s
evemin events 20000 times per 0.27s
node event emitter test
event emitter 20000 times per 4.93s
event emitter 20000 times per 2.37s
event emitter 20000 times per 0.52s
event emitter 20000 times per 0.53s
event emitter 20000 times per 0.53s
event emitter 20000 times per 0.54s
event emitter 20000 times per 0.53s
event emitter 20000 times per 0.57s
event emitter 20000 times per 0.55s
event emitter 20000 times per 0.54s
*/