私はwebsqlとindexeddbを比較するためのデモクロム拡張を行い、どちらの方法がより詳細に機能するかを学びました。IndexedDBはWebSQLに比べて非常に遅いですが、何が間違っていますか?
私の驚いたことに、indexeddbは最も単純なSQLコマンドと比べてもずっと遅いことがわかりました。
websqlはindexeddbの代わりに廃止されているので、indexeddbはwebsqlと同じか高速です。
私はindexeddbコードで何か間違っていると仮定しています。 はるかに高速なものを非難することは愚かで、私はindexeddbのためにwebsqlを非推奨にしているときに何をしているのか分かっていると思います。
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);
}
};
私はまた、クロムバグレポートを作って、そこに完全な拡張コードをアップロードしています http://code.google.com/p/chromium/issues/detail?id=122831
(私は拡張機能のzipファイルをここにアップロードすることはできません。そのような機能はありません)
テストデータとして使用した38862のURLを持つwebsqlデータベースとindexeddbデータベースの両方にデータを入力しました。
ユニバースは38862の "大きな"データセットですか? – ocodo
クライアント側のストレージユニバース内。 – buley