标题略显晦涩,但这里....
我有一个Backbone UI,它在页面加载时对API进行了大量调用。它使用骨干获取缓存来缓存GET请求。在Chrome上,缓存未命中意味着在同一时间对同一个URL执行许多GET请求时,Chrome会导致重复的XHR等待直到第一个XHR完成,然后随后的XHR才到达缓存。
在Firefox中,所有XHR都会立即处理,即使它们是对同一API端点的GET请求。从代码中重构它会很痛苦,所以问题是:
题:
是否存在修补Backbone或jQuery的sync()部分的现有方法,以便在所有浏览器中使用Chrome行为?这样Firefox在处理其他GET请求之前会先等待它?
最佳答案
您可以修改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/