gpt4 book ai didi

google-chrome-extension - 与 WebSQL 相比,IndexedDB 非常慢,我做错了什么?

转载 作者:行者123 更新时间:2023-12-01 17:13:59 27 4
gpt4 key购买 nike

我制作了一个演示 chrome 扩展来比较 websql 和 indexeddb 并更详细地了解两者的工作原理。

令我惊讶的是,即使与最简单的 sql 命令相比,indexeddb 也要慢得多。

由于 websql 已被弃用,取而代之的是 indexeddb,我认为 indexeddb 会与 websql 一样快或更快。

我假设我在 indexeddb 代码中做错了什么。因为弃用速度更快的东西是愚蠢的,而且我认为他们知道在弃用 websql 而支持 indexeddb 时他们在做什么。

sql搜索代码:

// Search entries
var term = search_query;
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM places', [], function (tx, results) {
console.log("sql search");
var count = 0;
var wm = WordsMatch.init(term.trim().toLowerCase());
var len = results.rows.length
for (var i = 0; i < len; ++i) {
var item = results.rows.item(i);
if (wm.search(item.url.toLowerCase())) {
//console.log(item.id, item.url);
++count;
}
}
console.log("Search matches:", count);
console.log("\n");
});
}, reportError);

indexeddb 搜索代码:

    PlacesStore.searchPlaces(search_query, function(places) {
console.log("indexedDB search");
var count = places.length;
console.log("Search matches:", count);
console.log("\n");
});

var PlacesStore = { searchPlaces: function (term, callback) {
var self = this,
txn = self.db.transaction([self.store_name], IDBTransaction.READ_ONLY),
places = [],
store = txn.objectStore(self.store_name);
var wm = WordsMatch.init(term.trim().toLowerCase());
Utils.request(store.openCursor(), function (e) {
var cursor = e.target.result;
if (cursor) {
if (wm.search(cursor.value.url.toLowerCase())) {
places.push(cursor.value);
}

cursor.continue();
}
else {
// we are done retrieving rows; invoke callback
callback(places);
}
});
}
}/**/


var Utils = {
errorHandler: function(cb) {
return function(e) {
if(cb) {
cb(e);
} else {
throw e;
}
};
},

request: function (req, callback, err_callback) {
if (callback) {
req.onsuccess = function (e) {
callback(e);
};
}
req.onerror = Utils.errorHandler(err_callback);
}
};

我还制作了 chrome 错误报告并在那里上传了完整的扩展代码: http://code.google.com/p/chromium/issues/detail?id=122831

(我无法在这里上传扩展zip文件,没有这样的功能)

我用 38862 个 URL 填充了 websql 和 indexeddb 数据库,并将其用作测试数据。

最佳答案

部分问题在于,IndexedDB 实现迄今为止主要致力于实现完整的规范,而较少关注性能。我们最近在 Firefox 中发现了一些非常愚蠢的错误,这些错误已得到修复,应该会让我们的速度显着提高。

我知道 Chrome 团队由于其多进程架构而遭受了一些挑战。我听说他们最近解决了其中一些问题。

因此,我鼓励您尝试所有浏览器的最新版本,可能包括 nightly/canary 版本。

但请注意,我们并没有弃用 WebSQL,因为 IndexedDB 速度更快。我们弃用了 WebSQL,因为它无法面向 future 。 WebSQL 被定义为使用特定的 SQLite 后端(如果您查看规范,它实际上写得很清楚)。然而,所有浏览器制造商都需要使用最新版本的 SQLite 才能获得安全、性能和稳定性修复。最新版本总是以微妙的方式改变 SQL 语法。这意味着我们会以微妙的方式破坏您使用 WebSQL 的 Web 应用程序。这对我们来说似乎不太好。

关于google-chrome-extension - 与 WebSQL 相比,IndexedDB 非常慢,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10102571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com