NPM Функциональный Мемоузер

// get the memoize function
const memoize = require("function-memoizer");

// demonstration function (returns whether or not a number is prime)
function isPrime(n) {
	if (typeof n !== "number") throw TypeError();
	if (n !== Math.round(n)) return false;
	if (n < 2) return false;
	if (n < 4) return true;
	if (n < 10) return n === 5 || n === 7;
	for (let i = 11; i * i < n; i++) if (n % i === 0) return false;
	return true;
}

// memoize isPrime and store it as a new function named memoizedIsPrime
let memoizedIsPrime = memoize(isPrime);

// get the number of iterations to run
let numberOfIterations = parseInt(prompt("Enter the number of iterations to perform "));

// record the start time
let startTime = Date.now(), originalTime;

// run iterations
for (let i = 0; i < numberOfIterations; i++) memoizedIsPrime(i);

// print the time taken
console.log("Total milleseconds for primes under " + numberOfIterations + ": " + (originalTime = Date.now() - startTime) + "ms");

// record the start time
startTime = Date.now();
let secondTime;

// run iterations
for (let i = 0; i < numberOfIterations; i++) memoizedIsPrime(i);

// print the time taken
console.log("Total milleseconds for primes under " + numberOfIterations + ": " + (secondTime = Date.now() - startTime) + "ms");

// print time difference
console.log("The second time ran ~" + Math.round(originalTime / secondTime) + "x faster");
MattDESTROYER