我有一个使用 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 浏览器的经验?