略微晦涩的标题,但在这里..
我有一个骨干UI,可以在页面加载上对API进行大量调用。它使用骨干fetch缓存来缓存GET请求。在Chrome上,缓存失误意味着,当执行许多人在同一URL上获得请求时,Chrome会导致重复的XHR等到第一次完成,然后随后的XHR击中缓存。
。在Firefox中,即使将请求得到到同一API端点,所有XHR也会立即处理。从代码中重新分解这将是一个痛苦,所以问题是:
问题:
是否有一种现有方法来修补主链或jQuery的同步部分,以便在所有浏览器中使用铬行为?因此,Firefox在处理其他内容之前先等待第一个重复获得请求?
您可以修改Backbone.ajax
以创建一个请求列表,并等待第一个完成,然后再发布后续内容。例如
//cached requests
Backbone.xhrs = {};
Backbone.ajax = function(opts) {
// cache GET requests, not the others
if (opts.type!=='GET')
return Backbone.$.ajax.apply(Backbone.$, arguments);
var xhr;
// issue the request if a cached version does not exist
if (!Backbone.xhrs[opts.url]) {
xhr = Backbone.xhrs[opts.url] = Backbone.$.ajax.call(Backbone.$, opts);
} else {
xhr = Backbone.xhrs[opts.url].then(function() {
return Backbone.$.ajax.call(Backbone.$, opts);
});
}
return xhr;
};
和演示http://jsfiddle.net/nikoshr/vexnp/