#javascript #node.js #discord.js
#javascript #node.js #discord.js
Вопрос:
Получение ответа от api занимает около 1,5 с, поэтому я подумал, что мог бы просто сохранять ответ каждые n минут, а затем вместо вызова внутренней команды api я бы просто возвращал сохраненный ответ. Итак, мой вопрос в том, каков наилучший способ сделать это? Поскольку ответ api очень длинный, я не думаю, что его стоит сохранять в db. Или, может быть, при каждом вызове команды просто вызывайте api, а затем сохраняйте его где-нибудь в течение n минут, и если команда была вызвана снова в течение этого n периода времени, просто получайте сохраненный ответ вместо того, чтобы каждый раз вызывать api.
Я просто не уверен, как и где сохранить ответ.
const fetch = require('node-fetch');
let data = await fetch('apiurl').then(body => body.json());
Комментарии:
1. Не могли бы вы, пожалуйста, добавить свой код?
2. добро пожаловать в SO. Попробуйте реализовать кэширование на стороне сервера, это должно помочь: npmjs.com/package/node-cache В будущем, пожалуйста, не забудьте опубликовать то, что вы пробовали с примерами кода, поскольку этот вопрос довольно широкий по объему.
3. У меня нет никакого конкретного кода, поскольку я понятия не имею, с чего начать, у меня просто есть базовый вызов api и все
4. @Bibberty Я начал использовать node-cache (спасибо Стивену Старку), еще один вопрос, является ли хорошей практикой вызывать api каждые 1-5 минут?
5. @StevenStark есть ли какие-нибудь плюсы в использовании
node-cache
сравнения с ответом от Bibberty?
Ответ №1:
В этом примере (очень простом, который я знаю) у нас есть кэш памяти, который обновляется, если он старше 5 секунд.
const dummyGetLiveData = () => {
return { "data": "value" }
};
let cache;
let maxCacheAgeInMilliseconds = 5000; // 5secs
const provideData = () => {
if(!cache || (Date.now() - cache.timeStamp > maxCacheAgeInMilliseconds) ) {
console.log('Cache Build');
cache = {
timeStamp: Date.now(),
data: dummyGetLiveData()
}
}
return cache.data;
};
document.querySelector('button').addEventListener('click', () => {
console.log(provideData());
});
<button>Get Data</button>