-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathbench.js
62 lines (56 loc) · 1.92 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
const benchmark = require('benchmark')
const chalk = require('chalk')
const dateFns = require('date-fns')
const moment = require('moment')
const timetable = require('./index')
var padSize = 23
function newSuite (name) {
var benches = []
return new benchmark.Suite(name)
.on('add', function (event) {
benches.push(event.target)
})
.on('start', function () {
process.stdout.write(chalk.white.bold('benchmarking ' + name + ' performance ...') + '\n\n')
})
.on('cycle', function (event) {
process.stdout.write(String(event.target) + '\n')
})
.on('complete', function () {
if (benches.length > 1) {
benches.sort(function (a, b) { return getHz(b) - getHz(a) })
const fastest = benches[0]
const fastestHz = getHz(fastest)
process.stdout.write('\n' + chalk.white(pad(fastest.name, padSize)) + ' was ' + chalk.green('fastest') + '\n')
benches.slice(1).forEach(function (bench) {
const hz = getHz(bench)
const percent = 1 - hz / fastestHz
process.stdout.write(chalk.white(pad(bench.name, padSize)) + ' was ' + chalk.red((percent * 100).toFixed(1) + '% ops/sec slower (factor ' + (fastestHz / hz).toFixed(1) + ')') + '\n')
})
}
process.stdout.write('\n')
})
}
function getHz (bench) {
return 1 / (bench.stats.mean + bench.stats.moe)
}
function pad (str, len, l) {
while (str.length < len) { str = l ? str + ' ' : ' ' + str }
return str
}
const moment1 = moment('2019-08-17')
const moment2 = moment('1912-03-14')
newSuite('diff')
.add('timetable', function () {
timetable.diff('1912-03-14', '2019-08-17')
})
.add('moment', function () {
moment('2019-08-17').diff(moment('1912-03-14'), 'days')
})
.add('moment (reuse)', function () {
moment1.diff(moment2, 'days')
})
.add('date-fns', function () {
dateFns.differenceInCalendarDays(new Date(2019, 8, 17), new Date(1912, 3, 14))
})
.run()