CyrefJS
CCyrefJS
EN
بازگشت به مستندات
تابع/از نسخه 1.38.0

memoize

نتیجه تابع را ذخیره می‌کند و زمانی که همان کلید کش دوباره درخواست شود، نتیجه ذخیره‌شده را برمی‌گرداند.

memoize(fn, resolver):(...args: TArgs) => TResult

پارامترها

fn(...args: TArgs) => TResultالزامی

تابعی که نتایج آن باید ذخیره و کش شود.

resolver(...args: TArgs) => unknownاختیاری

تابع اختیاری که برای ساخت کلید کش از آرگومان‌های تابع استفاده می‌شود.

مقدار بازگشتی

(...args: TArgs) => TResult

تابعی را برمی‌گرداند که نتایج تابع اصلی را کش کرده و در فراخوانی‌های بعدی استفاده می‌کند.

مثال‌ها

01

استفاده پایه

نتیجه برای یک آرگومان یکسان فقط یک بار محاسبه می‌شود.

TypeScript
const calculate = memoize((value: number) => {
  console.log("Calculating...");
  return value * 2;
});

console.log(calculate(5));
// Calculating...
// 10

console.log(calculate(5));
// 10
02

چند آرگومان

وقتی resolver داده نشده باشد، چند آرگومان با JSON.stringify به یک کلید کش تبدیل می‌شوند.

TypeScript
const add = memoize((a: number, b: number) => {
  console.log("Calculating...");
  return a + b;
});

console.log(add(2, 3));
// Calculating...
// 5

console.log(add(2, 3));
// 5
03

استفاده از resolver

با resolver می‌توانید کلید کش را به‌صورت سفارشی از روی آرگومان‌ها تعیین کنید.

TypeScript
const getUser = memoize(
  (id: number, name: string) => {
    console.log("Fetching user...");
    return { id, name };
  },
  (id) => id,
);

console.log(getUser(1, "Amir"));
// Fetching user...
// { id: 1, name: "Amir" }

console.log(getUser(1, "Ali"));
// { id: 1, name: "Amir" }
04

یک آرگومان

با یک آرگومان و بدون resolver، خود آرگومان به‌عنوان کلید کش استفاده می‌شود.

TypeScript
const square = memoize((value: number) => value * value);

console.log(square(4));
// 16

console.log(square(4));
// 16
05

آرگومان‌های متفاوت

کلیدهای کش متفاوت باعث می‌شوند تابع اصلی برای هر مقدار جداگانه اجرا شود.

TypeScript
const double = memoize((value: number) => {
  console.log("Calculating...");
  return value * 2;
});

console.log(double(5));
// Calculating...
// 10

console.log(double(10));
// Calculating...
// 20
06

کش کردن نتیجه آبجکت

نتیجه برگردانده‌شده ذخیره می‌شود و در فراخوانی‌های بعدی با همان کلید، همان نتیجه کش‌شده برگردانده می‌شود.

TypeScript
const createUser = memoize((name: string) => ({
  name,
}));

const first = createUser("Amir");
const second = createUser("Amir");

console.log(first === second);
// true
ساخته شده با@cyref/js·مستندات رسمی