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 faster-query
or
yarn add faster-query
Example
see examples
dir for more examples.
import ISR from 'faster-query';
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,
criticalCacheTime = 60 * 60 * 1000,
key,
onComplete = function(data: any) :any,
isLogging = false,
noCache = false,
clearCache = false,
}
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 faster-query
или
yarn add faster-query
Пример
В папке examples
есть пару примеров.
import ISR from 'faster-query';
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,
criticalCacheTime = 60 * 60 * 1000 ,
key,
onComplete = function(data: any) :any,
isLogging = false,
noCache = false,
clearCache = false,
}
Методы класса
getData
- асинхронная, возврат данных
Как это работает
- Первое выполнение: выполняется функция, возвращающается результат, результат кэшируется
- Вторая и последующие выполнения:
-
- Если
cacheTime
< времени с момента первого выполнения - возвращается результат из кэша
- Если
cacheTime
>, времени с момента первого выполнения: немедленно возвращается результат из кэша, а затем выполняется функция и результат помещается в кэш
- Если
criticalCacheTime
> времени с момента последнего выполнения: все работает как при первом выполнении