-
-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy path2-speed.js
41 lines (36 loc) · 1007 Bytes
/
2-speed.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
'use strict';
const LOOP = 10000;
function memoize(fn) {
const cache = new Map();
return (...args) => {
const key = args + '';
if (cache.has(key)) {
return cache.get(key);
}
else {
const res = fn(...args);
cache.set(key, res);
return res;
}
};
}
let fib = n => (n <= 2) ? 1 : fib(n - 1) + fib(n - 2);
function speedTest(name, fn, args, count) {
let start = new Date().getTime();
let i; //or use "var" in for(...). (no)
for (i = 0; i < count; i++) {
fn(...args);
}
let end = new Date().getTime();
let time = end - start;
console.log(`${name} * ${count} : ${time}`);
}
speedTest('fib(10)', fib, [10], LOOP);
speedTest('fib(15)', fib, [15], LOOP);
speedTest('fib(20)', fib, [20], LOOP);
speedTest('fib(25)', fib, [25], LOOP);
fib = memoize(fib);
speedTest('memoized fib(10)', fib, [10], LOOP);
speedTest('memoized fib(15)', fib, [15], LOOP);
speedTest('memoized fib(20)', fib, [20], LOOP);
speedTest('memoized fib(25)', fib, [25], LOOP);