【问题标题】:Caching and invalidating XHR/Ajax response programmatically以编程方式缓存和无效 XHR/Ajax 响应
【发布时间】:2011-05-15 03:07:16
【问题描述】:

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

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

问候,
纳奇基特

【问题讨论】:

    标签: javascript ajax caching xmlhttprequest browser-cache


    【解决方案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;
    
          }
    
       }
    }
    

    奖励,将已经运行的请求处理程序(通过 url)排队。

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多