【问题标题】:Chrome chokes on TOO many XHR2 requestsChrome 因太多 XHR2 请求而窒息
【发布时间】:2013-05-25 01:19:15
【问题描述】:

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

【问题讨论】:

    标签: html google-chrome xmlhttprequest blob


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 2018-10-20
      • 2011-02-09
      • 2021-07-15
      相关资源
      最近更新 更多