Chromium 上的 Indexeddb OpenCursor 是否在非活动选项卡上受到限制?
Is Indexeddb OpenCursor on Chromium being throttled on non-active tabs?
我最近读到 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)。在活动浏览器选项卡中循环遍历它们几乎是即时的,而在非活动选项卡上,这突然需要两分钟以上才能完成。
问题:这是否与浏览器供应商减慢后台选项卡进程有关?如果是这样,disable/sources 的标志是否需要继续阅读?
在 Chrome55 中,后台选项卡限制和索引数据库如何交互存在问题:https://bugs.chromium.org/p/chromium/issues/detail?id=675372 - 简短版本:事件传递被限制为每秒一次,因此游标(例如)会迭代的很慢。
在 56 及更高版本中,一旦事务在后台选项卡中启动,索引数据库事件不应受到限制。
我最近读到 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)。在活动浏览器选项卡中循环遍历它们几乎是即时的,而在非活动选项卡上,这突然需要两分钟以上才能完成。
问题:这是否与浏览器供应商减慢后台选项卡进程有关?如果是这样,disable/sources 的标志是否需要继续阅读?
在 Chrome55 中,后台选项卡限制和索引数据库如何交互存在问题:https://bugs.chromium.org/p/chromium/issues/detail?id=675372 - 简短版本:事件传递被限制为每秒一次,因此游标(例如)会迭代的很慢。
在 56 及更高版本中,一旦事务在后台选项卡中启动,索引数据库事件不应受到限制。