@deck.gl/core
Version:
deck.gl core library
47 lines (42 loc) • 1.09 kB
text/typescript
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
function isEqual(a, b) {
if (a === b) {
return true;
}
if (Array.isArray(a)) {
// Special treatment for arrays: compare 1-level deep
// This is to support equality of matrix/coordinate props
const len = a.length;
if (!b || b.length !== len) {
return false;
}
for (let i = 0; i < len; i++) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
}
return false;
}
/**
* Speed up consecutive function calls by caching the result of calls with identical input
* https://en.wikipedia.org/wiki/Memoization
* @param {function} compute - the function to be memoized
*/
export default function memoize<In, Out>(compute: (args: In) => Out): (args: In) => Out {
let cachedArgs: any = {};
let cachedResult: Out;
return (args: In) => {
for (const key in args) {
if (!isEqual(args[key], cachedArgs[key])) {
cachedResult = compute(args);
cachedArgs = args;
break;
}
}
return cachedResult;
};
}