-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmemoize.benchmark.ts
91 lines (77 loc) · 2.32 KB
/
memoize.benchmark.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
import fastMemoize from 'fast-memoize'
import lodash from 'lodash'
import { Benchmark } from '../benchmarkHelper'
import { memoize } from './memoize'
function monadicPrimitiveFunc(a: number): number {
return a + 1
}
function monadicSerializedFunc(a: string): string {
return a + '1'
}
function variadicFunc(a: number, b: number): number {
return a + b
}
const benchmark = new Benchmark('memoize')
const lodashMonadicPrimitiveFunc = lodash.memoize(monadicPrimitiveFunc)
benchmark.add({
library: 'lodash',
input: 'monadic (primitive)',
func: () => lodashMonadicPrimitiveFunc(1),
})
const fastMemoizeMonadicPrimitiveFunc = fastMemoize(monadicPrimitiveFunc, {
strategy: fastMemoize.strategies.monadic,
})
benchmark.add({
library: 'fast-memoize',
input: 'monadic (primitive)',
func: () => fastMemoizeMonadicPrimitiveFunc(1),
})
const flockyMonadicPrimitiveFunc = memoize(monadicPrimitiveFunc, { strategy: 'monadic' })
benchmark.add({
library: 'flocky',
input: 'monadic (primitive)',
func: () => flockyMonadicPrimitiveFunc(1),
})
const lodashMonadicSerializedFunc = lodash.memoize(monadicSerializedFunc, (...args) =>
JSON.stringify(args)
)
benchmark.add({
library: 'lodash',
input: 'monadic (serialized)',
func: () => lodashMonadicSerializedFunc('1'),
})
const fastMemoizeMonadicSerializedFunc = fastMemoize(monadicSerializedFunc, {
strategy: fastMemoize.strategies.monadic,
})
benchmark.add({
library: 'fast-memoize',
input: 'monadic (serialized)',
func: () => fastMemoizeMonadicSerializedFunc('1'),
})
const flockyMonadicSerializedFunc = memoize(monadicSerializedFunc, { strategy: 'monadic' })
benchmark.add({
library: 'flocky',
input: 'monadic (serialized)',
func: () => flockyMonadicSerializedFunc('1'),
})
const lodashVariadicFunc = lodash.memoize(variadicFunc, (...args) => JSON.stringify(args))
benchmark.add({
library: 'lodash',
input: 'variadic',
func: () => lodashVariadicFunc(1, 2),
})
const fastMemoizeVariadicFunc = fastMemoize(variadicFunc, {
strategy: fastMemoize.strategies.variadic,
})
benchmark.add({
library: 'fast-memoize',
input: 'variadic',
func: () => fastMemoizeVariadicFunc(1, 2),
})
const flockyVariadicFunc = memoize(variadicFunc, { strategy: 'variadic' })
benchmark.add({
library: 'flocky',
input: 'variadic',
func: () => flockyVariadicFunc(1, 2),
})
benchmark.run()