我最近一直在阅读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)。在活动的浏览器选项卡中循环显示它们几乎是即时的,而在非活动选项卡上,这突然需要两分钟才能完成。
问题:这是否与浏览器供应商减慢背景标签流程的工作有关?如果是这样,是否有禁用/来源读取的标志?
答案 0 :(得分:1)
在Chrome 55中,背景标签限制和索引数据库交互的方式存在问题:https://bugs.chromium.org/p/chromium/issues/detail?id=675372 - 简短版本:事件传递限制为每秒一次,因此游标(例如)会非常缓慢地迭代。 / p>
在56及更高版本中,一旦事务在后台选项卡中启动,索引数据库事件就不应受到限制。