Chrome会对TOO许多XHR2请求造成阻塞

时间:2013-05-29 16:47:58

标签: html5 google-chrome xmlhttprequest blob

我有一个“JSFiddle-like”演示,使用XHR2在紧密循环中获取PNG(二进制Blob)。第一个演示抓取341个PNG图像,然后将它们保存在IndexedDB中(使用PouchDB)。

此演示工作正常:http://codepen.io/DrYSG/pen/hpqoD

(要操作,首先按[删除数据库],重新加载页面,等待状态=就绪(您应该看到它计划获取341个图块),然后按[下载图块]。)

下一个演示是相同的代码(相同的JS,CSS,HTML),但它试图获得6163个PNG文件(再次来自Google Drive)。这次您将在控制台日志中看到许多XHR 0错误。

http://codepen.io/DrYSG/pen/qCGxi

它使用的算法如下:

  • 测试是否存在XHR2,IndexedDB和Chrome(没有二进制blob,但是Base64)。并显示此状态信息
  • 从GoogleDrive中获取PNG图块的JSON清单(我有171个PNG图块,每个图块大小为256x256)。清单列出了它们的名称和大小。
  • 将JSON清单存储在数据库
  • MVVM和UI控件来自KendoUI(这次我没有使用他们精湛的网格控件,因为我想探索CSS3网格样式)。
  • 我正在使用PouchDB的每晚构建
  • 所有文件PNG文件均来自Google云端硬盘(NASA Blue Marble。
  • 我用Safe FME 2013 Desktop创建了瓷砖金字塔。

我的猜测是,所有这些XHR2请求都被异步触发,被放置在与JavaScript线程分开的线程上,然后当有太多未决请求时,Chrome就生病了。

FireFox没有这个问题,也没有IE10。

您可以分叉代码,并为第10行尝试不同的值:(要获取的最大切片数量)。

我已向 Chromium Bugs 提交了一个错误,但有没有人有任何限制将大量数据下载的异步XHR2提取到Chrome浏览器的经验?

1 个答案:

答案 0 :(得分:0)

铬人们承认这是他们应该解决的问题:https://code.google.com/p/chromium/issues/detail?id=244910,但与此同时我使用jquery defer / resolve实现了限制以保持线程数低。

更新:我将删除我的codepen,因为我不再需要显示此错误。