Chromium上的Indexeddb OpenCursor是否在非活动选项卡上受到限制?

时间:2017-09-20 11:50:04

标签: javascript google-chrome tabs indexeddb throttling

我最近一直在阅读Chrome会从Chrome 57开始限制后台标签流程(here)。我正在运行Chromium 55,并注意到当标签未关注时,我的indexeddb查询的运行速度要慢得多。

例如,我有:

return openIndexedDB(this)
  .push(function (db) {
    return new RSVP.Promise(function (resolve, reject) {
      var tx = openTransaction(db, ["metadata"], "readonly");
      if (options.include_docs === true) {
        handleCursor(tx.objectStore("metadata").index("_id").openCursor(),
          pushIncludedMetadata, resolve, reject);
      } else {
        handleCursor(tx.objectStore("metadata").index("_id")
                        .openKeyCursor(), pushMetadata, resolve, reject);
      }
    });
  })
  .push(function () {
    return result_list;
  });
};

handleCursor

  function handleCursor(request, callback, resolve, reject) {
    request.onerror = function (error) {
      if (request.transaction) {
        request.transaction.abort();
      }
      reject(error);
    };

    request.onsuccess = function (evt) {
      var cursor = evt.target.result;
      if (cursor) {
        // XXX Wait for result
        console.log("waiting");
        try {
          console.log("done");
          callback(cursor);
        } catch (error) {
          reject(error);
        }

        // continue to next iteration
        cursor["continue"]();
      } else {
        resolve();
      }
    };
  }

我的indexeddb数据库只有大约60条记录(JSON,每条记录<1k)。在活动的浏览器选项卡中循环显示它们几乎是即时的,而在非活动选项卡上,这突然需要两分钟才能完成。

问题:这是否与浏览器供应商减慢背景标签流程的工作有关?如果是这样,是否有禁用/来源读取的标志?

1 个答案:

答案 0 :(得分:1)

在Chrome 55中,背景标签限制和索引数据库交互的方式存在问题:https://bugs.chromium.org/p/chromium/issues/detail?id=675372 - 简短版本:事件传递限制为每秒一次,因此游标(例如)会非常缓慢地迭代。 / p>

在56及更高版本中,一旦事务在后台选项卡中启动,索引数据库事件就不应受到限制。