Трудно сделать что-то простое.
Я намеревался сделать наше приложение Node более производительным. Производительность тяжела, сложна и отнимает много времени, а я упоминал о сложности?
Итак, я выбрал кэширование в памяти. Вот как выглядел мой код до кэширования
module.exports = function () { return { method: ‘GET’, path: ‘/myGetRequest/{myParam}’, handler: function (request, reply) { const requestParam = decodeURIComponent(request.params.myParam); const result = myActualCodeToGetData(requestParam); return reply(result); }, }; };
С помощью memory-cache мы могли реализовать кеширование всего несколькими строками (выделены жирным шрифтом).
const cache = require('memory-cache'); module.exports = function () { return { method: ‘GET’, path: ‘/myGetRequest/{myParam}’, handler: function (request, reply) { const requestParam= decodeURIComponent(request.params.myParam), key = 'myGetRequest' + myParam.toLowerCase(), cachedResult = cache.get(key); if (cachedResult !== null) { return reply(cachedResult); } const result = myActualCodeToGetData(requestParam); cache.put(cacheKey, result); return reply(result); }, }; };
Добавив только кеширование, мы смогли сократить время выполнения нашего самого сложного запроса с 700 мс до менее чем 50 мс.
Конечно, вам понадобится способ аннулировать ваш кеш, что так же просто, как поместить его в кеш.
cache.clear() // deletes all keys cache.del(key) // deletes a particular
Я знаю, у вас могут возникнуть следующие вопросы:
- Все мое кэширование пропадает всякий раз, когда мой сервер перезагружается?
- Что делать, если мой кеш-ключуникален для большинства моих запросов?
- Достаточно ли оперативной памяти на моей машине?
- Если я сижу за балансировщиком нагрузки со многими серверами, каков будет мой коэффициент попаданий в кэш?
- Мое приложение больше UPSERT, чем чтение
Конечно, в приведенных выше сценариях, а может быть и в других, это может не иметь смысла. Там вы можете использовать Redis/memcached.