Трудно сделать что-то простое.

Я намеревался сделать наше приложение 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.