Кэширование и аннулирование ответа XHR / Ajax программным путем - PullRequest
0 голосов
/ 24 ноября 2010

Рассмотрим веб-страницу с большим количеством вызовов XHR к серверу и iframe, который снова содержит множество вызовов XHR к серверу. Многие из этих вызовов одинаковы (избыточны). У меня есть единый интерфейс связи (то есть набор методов в объекте javascript).

Как оптимизировать серверные звонки? Можем ли мы кешировать ответы? (Я могу сделать недействительным сохраненный ответ, если произойдет какое-либо действие, которое может изменить ответ), Также этот кэш должен быть очищен после обновления страницы Есть ли такой компонент / техника в наличии?

С уважением,
Nachiket

1 Ответ

0 голосов
/ 24 ноября 2010

Некоторая форма запоминания. ПРИМЕЧАНИЕ: вам придется изменить следующий код, чтобы приспособить вашу реализацию XHR. Пришлось делать предположения, так как вы не предложили код.

var cacheXHRWrapper = function ( url , handler ) {

   var cache = {};
   var queued = {};
   var pending = {};

   if ( cache[ url ] ) {

      handler( cache[ url ] );

   } else {

      queued[ url ] || ( queued[ url ] = [] ); // I know, call me lazy.
      queued[ url ].push( handler );

      if ( !pending[ url ] ) {

         // might want to adjust this to comply to your XHR implementation
         XHR_IMPL.request( url , function ( response ) {

            // cache response
            cache[ url ] = response;

            // serve all queued handlers.
            var fn = queued[ url ].shift();
            while ( fn ) {
               fn( response );
               fn = queued[ url ].shift();
            }

         } );

         pending[ url ] = true;

      }

   }
}

Бонус, очереди обработчиков запросов (по URL), которые уже запущены.

...