1.0.0 • Published 5 years ago

@ngard/tiny-memoize v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

tiny-memoize

source bundle size build status license

A minimal-weight utility similar to lodash.memoize. For when every byte counts!

lodash.memoize bundle size tiny-memoize bundle size

Syntax

memoize(/* function [, maxMemoizations, reconciler] */)

Parameters

function - The function to memoize maxMemoizations - optional = 1 A positive numerical value that designates the number of unique function calls to memoize. Non-numeric and non-positive values will default to 1. Positive non-integer values will round down to the nearest integer, or up to 1 for values between 0 and 1. reconciler - optional A function that compares two cache keys for equality. Cache keys are arguments objects. The default reconciler checks each argument for equality using ===.

Return

A function that will return the value of the arguments applied to the passed function, either by invoking the function or by performing a lookup (by arguments) of previously generated values.

Example

import { memoize } from '@ngard/tiny-memoize';

const efficientPrimeCalculator = memoize(isPrime, Infinity);
efficientPrimeCalculator(1000000000000066600000000000001); // isPrime is called, returns true
efficientPrimeCalculator(1000000000000066600000000000001); // isPrime is NOT called, returns true
import { memoize } from '@ngard/tiny-memoize';

const isSamePerson = (args1, args2) => {
  const person1 = args1[0];
  const person2 = args2[0];
  return person1.id === person2.id;
};
const greet = memoize(person => `Hi, ${person.givenName}!`, 1, isSamePerson);
greet({
  id: 845739,
  givenName: 'Janine',
  surname: 'Bloomfield',
  occupation: 'senior accountant',
  birthdate: new Date('Jan 02 1991')
}); // calculates 'Hi, Janine!'
greet({
  id: 845739,
  givenName: 'Janine',
  surname: 'Bloomfield',
  occupation: 'CTO',
  birthdate: new Date('Jan 02 1991')
}); // returns memoized result 'Hi, Janine!'