jQuery/Backbone and Firefox vs Chrome HTTP requests



略微晦涩的标题,但在这里..

我有一个骨干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/

最新更新