Opal-Estate-Pro/node_modules/memoizee/benchmark/fibonacci.js
2019-09-13 11:27:52 +07:00

141 lines
2.7 KiB
JavaScript
Executable File

/* global console */
/* eslint no-console: 0, id-length: 0 */
"use strict";
// Simple benchmark for very simple memoization case (fibonacci series)
// To run it, do following in memoizee package path:
//
// $ npm install underscore lodash lru-cache secondary-cache
// $ node benchmark/fibonacci.js
var forEach = require("es5-ext/object/for-each")
, pad = require("es5-ext/string/#/pad")
, memoizee = require("..")
, underscore = require("underscore").memoize
, lodash = require("lodash").memoize
, lruCache = require("lru-cache")
, lruSecondary = require("secondary-cache/lib/lru-cache");
var now = Date.now
, time
, getFib
, lru
, memo
, total
, index = 3000
, count = 10
, i
, lruMax = 1000
, data = {}
, lruObj;
getFib = function (memoize, opts) {
var fib = memoize(function (x) {
return x < 2 ? 1 : fib(x - 1) + fib(x - 2);
}, opts);
return fib;
};
lru = function (x) {
var value = lruObj.get(x);
if (value === undefined) {
value = x < 2 ? 1 : lru(x - 1) + lru(x - 2);
lruObj.set(x, value);
}
return value;
};
console.log("Fibonacci", index, "x" + count + ":\n");
total = 0;
i = count;
while (i--) {
memo = getFib(memoizee);
time = now();
memo(index);
total += now() - time;
}
data["Memoizee (object mode)"] = total;
total = 0;
i = count;
while (i--) {
memo = getFib(memoizee, { primitive: true });
time = now();
memo(index);
total += now() - time;
}
data["Memoizee (primitive mode)"] = total;
total = 0;
i = count;
while (i--) {
memo = getFib(underscore);
time = now();
memo(index);
total += now() - time;
}
data.Underscore = total;
total = 0;
i = count;
while (i--) {
memo = getFib(lodash);
time = now();
memo(index);
total += now() - time;
}
data["Lo-dash"] = total;
total = 0;
i = count;
while (i--) {
memo = getFib(memoizee, { primitive: true, max: lruMax });
time = now();
memo(index);
total += now() - time;
}
data["Memoizee (primitive mode) LRU (max: 1000)"] = total;
total = 0;
i = count;
while (i--) {
memo = getFib(memoizee, { max: lruMax });
time = now();
memo(index);
total += now() - time;
}
data["Memoizee (object mode) LRU (max: 1000)"] = total;
total = 0;
i = count;
while (i--) {
lruObj = lruCache({ max: lruMax });
time = now();
lru(index);
total += now() - time;
}
data["lru-cache LRU (max: 1000)"] = total;
total = 0;
i = count;
while (i--) {
lruObj = lruSecondary(lruMax);
time = now();
lru(index);
total += now() - time;
}
data["secondary-cache LRU (max: 1000)"] = total;
forEach(
data,
function (value, name, obj, currentIndex) {
console.log(currentIndex + 1 + ":", pad.call(value, " ", 5) + "ms ", name);
},
null,
function (a, b) {
return this[a] - this[b];
}
);