2

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

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

(要操作,先按【Delete DB】,重新加载页面,等待Status = Ready(你应该看到它计划取341个tiles),然后按【Download tiles】。)

下一个演示是相同的代码(相同的 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 Drive (NASA Blue Marble.
  • 我使用Safe FME 2013 Desktop创建了瓷砖金字塔。

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

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

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

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

4

1 回答 1

0

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

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

于 2013-06-23T19:19:41.240 回答