Три параметра (cache, key, maxage) позволяют закэшировать блок и при последующем запуске брать результат из кэша.
Пример:
const cache = new de.Cache();
const block = de.block( {
options: {
// Кэшируем по имени метода и параметру id.
key: ( { params } ) => `my_method:id=${ params.id }`,
// Храним 1 час.
maxage: 60 * 60 * 1000,
// Задаем в каком кэше все храним.
cache: cache,
},
} );Для начала нужно задать кэш, в который мы будем писать и из которого будем читать данные. Кэш – это интерфейс с двумя методами:
export interface CacheInterface<Result> {
get: ({ key }: { key: string }) => Promise<Result | undefined>;
set: ({ key, value, maxage }: { key: string; value: Result; maxage?: number }) => Promise<void>;
}- Метод
getдолжен вернуть данные, соответствующие переданному ключу. Синхронно или в виде промиса. - Метод
setсоответственно, должен сохранить значениеvalueпо ключуkeyна периодmaxage. Результат работыsetигнорируется.
Есть встроенный очень простой кэш de.Cache:
const cache = new de.Cache();Он хранит все просто в памяти, нет ограничений на количество записей. Так что для каких-то серьезных ситуаций лучше его не использовать, а использовать descript-redis-cache.
cache также может быть функцией ({ params }) => Promise<CacheInterface<Result>>. Если функция выбросит ошибку, то блок продолжит выполнение без кэширования.
Обязательный параметр key задает ключ хранения.
Ключ может быть строкой или вычисляться динамически.
options: {
// Кэшируем по имени метода и параметру id.
key: ( { params } ) => `my_method:id=${ params.id }`,
},Необязательный параметры maxage задает срок хранения.
Для de.Cache задается в миллисекундах (0 - вечное хранение),
но в если реализовать свой интерфейс кеша, то можно задать любой срок хранения.
options: {
// Храним 1 секунду.
maxage: 1000,
},