데모 크롬 확장을 사용하여 websql과 indexeddb를 비교하고 둘 다 더 자세히 작업하는 방법을 배웠습니다.WebSQL에 비해 IndexedDB가 매우 느리며, 무엇을 잘못하고 있습니까?
놀랍게도 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);
색인화 된 검색 코드 :
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