1.0.13 • Published 1 year ago

get-incremental-cached-data v1.0.13

Weekly downloads
-
License
BSD-3-Clause
Repository
github
Last release
1 year ago

Incremental Data Revalidation for any slow function.

The purpose of this script is to immediately and very quickly (a few milliseconds) return result of execution slow functions from cache and update the data in the cache after the data is returned.

For example, you have fetch, the request is executed for 200 milliseconds and each client waits for data to load, although the data is updated once an hour. This script, after the first execution, caches the data and returns the result of the previous execution in ~5 milliseconds. This is similar to getStaticProps with revalidate in recent versions next.js.

Installation

npm i get-incremental-cached-data

or

yarn add get-incremental-cached-data

Example

see examples dir for more examples.

import ISR from 'get-incremental-cached-data';

const url = 'https://slow.site/with/slow/backend';
const slowFunctionWithQueryData = () => fetch(url);

const isr = new ISR(slowFunctionWithQueryData, {
    key: url,
    cacheTime: 30 * 1000,
});

let data = await isr.getData();

Constructor

first argument

Asynchronous Function (fetching, calculating, etc...) Must return some data.

const slowFunctionWithQueryData = () => fetch('https://slow.site/with/slow/backend');

second argument

Object of options

options = {
    cacheTime = 5 * 1000, // Time from first execution, then script will re-execute function. Returning CACHED data (Boolean, Time in milliseconds)
    criticalCacheTime = 60 * 60 * 1000, // Time, after first execution, then cache is cleaned/ Function executed always (Milliseconds)
    key, // Unique key in cache (String, Buffer, Array or Uint8Array)
    onComplete = function(data: any) :any, // Do something with data from first function (Function)
    isLogging = false, // Show logs or not (Boolean)
    noCache = false, // if true - no magic (Boolean)
    clearCache = false, // If true - ALL cache will be cleaned before execution (Boolean)
}

Methods

getData - async, returning data

How it works

  • First execution: executing function, returning result, result is caching
  • Second execution:
    • If cacheTime < then time from first execution - returning result from cache
    • If cacheTime > then time from first execution: immediately returning result from cache, re-executing function and putting result to cache
  • If criticalCacheTime > then time from last execution: like in First execution

--- По-русски ---

Цель этого скрипта - немедленно и очень быстро (несколько миллисекунд) вернуть результат выполнения медленных функций из кеша и обновить данные в кэше после того, как данные будут возвращены.

Например, у вас есть fetch, запрос выполняется в течение 200 миллисекунд, и каждый клиент ожидает загрузки данных, хотя данные обновляются раз в час. Этот скрипт после первого выполнения кэширует данные и возвращает результат предыдущего выполнения через ~5 миллисекунд. Это похоже на getStaticProps с параметром revalidate в последних версиях next.js .

Установка

npm i get-incremental-cached-data

или

yarn add get-incremental-cached-data

Пример

В папке examples есть пару примеров.

import ISR from 'get-incremental-cached-data';

const url = 'https://slow.site/with/slow/backend';
const slowFunctionWithQueryData = () => fetch(url);

const isr = new ISR(slowFunctionWithQueryData, {
    key: url,
    cacheTime: 30 * 1000,
});

let data = await isr.getData();

Constructor

Первый аргумент класса

Медленная Асинхронная функция (запрос данных с бекенда, например)

const slowFunctionWithQueryData = () => fetch('https://slow.site/with/slow/backend');

Второй аргумент

Объект настроек выполнения

options = {
    cacheTime = 5 * 1000, // Время с момента первого выполнения, затем скрипт повторно выполнит функцию. Возврат **кешированных** данных (Boolean, время в миллисекундах)
    criticalCacheTime = 60 * 60 * 1000 , // Время, после первого выполнения, когда кэш очистится / Функция выполняется всегда (миллисекунды)
    key, // Уникальный ключ в кэше (строка, буфер, массив или Uint8Array)
    onComplete = function(data: any) :any, // Операции с данными из первой функции (Function)
    isLogging = false, // Показывать отладку в консоли или нет (Boolean)
    noCache = false, // если true - никакой магии (Boolean)
    clearCache = false, // Если true - **весь** кэш будет очищен перед выполнением (Boolean)
}

Методы класса

getData - асинхронная, возврат данных

Как это работает

  • Первое выполнение: выполняется функция, возвращающается результат, результат кэшируется
  • Вторая и последующие выполнения:
    • Если cacheTime < времени с момента первого выполнения - возвращается результат из кэша
  • Если cacheTime >, времени с момента первого выполнения: немедленно возвращается результат из кэша, а затем выполняется функция и результат помещается в кэш
  • Если criticalCacheTime > времени с момента последнего выполнения: все работает как при первом выполнении
1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago