以编程方式缓存和无效XHR / Ajax响应

时间:2010-11-24 13:55:49

标签: javascript ajax caching xmlhttprequest browser-cache

考虑一个对服务器和A iframe进行大量XHR调用的网页,它再次包含对服务器的大量XHR调用。 许多此调用都是相同的(冗余)。我确实有单一的通信接口(即javascript对象中的方法集)。

如何优化服务器调用?我们可以缓存回复吗? (当某些动作发生时,我可以使存储的响应无效,这可能会改变响应),此页面刷新后应该清除此缓存。有没有这样的组件/技术?

的问候,
Nachiket

1 个答案:

答案 0 :(得分:-1)

某种形式的记忆。 注意:您必须更改以下代码以适应您的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;

      }

   }
}

Bonus,队列请求处理程序(通过url)已经运行。