-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbench.js
69 lines (57 loc) · 1.3 KB
/
bench.js
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
const backoff = require('./index')
const TEST_SIZE = 1000000
async function main() {
for (const name in tests) {
const test = tests[name]
console.log(`testing ${name}`)
console.time(`${name}`)
test.setup()
let invocationTime = 0
for (let i = 0; i < TEST_SIZE; i++) {
const start = Date.now()
await test.run()
invocationTime += Date.now() - start
}
console.timeEnd(`${name}`)
console.log(`average invocationTime ${invocationTime / TEST_SIZE}`)
console.log('------------------------------------------------------')
}
}
const tests = {
normal: {
setup: () => {
this.work = () => immediate()
},
run: () => backoff(this.work)
},
cached: {
setup: () => {
this.retry = backoff.cached()
this.work = () => immediate()
},
run: () => this.retry(this.work)
},
iterator: {
setup: () => {
this.work = () => immediate()
},
run: async () => {
const iterator = backoff.iterator(this.work)
for await (const attempt of iterator) {}
}
},
cachedIterator: {
setup: () => {
this.iterator = backoff.cachedIterator()
this.work = () => immediate()
},
run: async () => {
const iterator = this.iterator(this.work)
for await (const attempt of iterator) {}
}
}
}
function immediate() {
return new Promise(resolve => setImmediate(resolve))
}
main()