Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension 与WebSQL相比,IndexedDB非常慢,我做错了什么?_Google Chrome Extension_Web Sql_Indexeddb - Fatal编程技术网

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

Google chrome extension 与WebSQL相比,IndexedDB非常慢,我做错了什么?,google-chrome-extension,web-sql,indexeddb,Google Chrome Extension,Web Sql,Indexeddb,我制作了一个chrome扩展演示,比较websql和indexeddb,并更详细地了解两者的工作原理 令我惊讶的是,它显示indexeddb比最简单的sql命令慢得多 由于websql已经被弃用,取而代之的是indexeddb,所以我认为indexeddb将与websql一样快或更快 我假设我在indexeddb代码中做错了什么。 因为不推荐速度更快的东西是愚蠢的,我想他们知道当不推荐websql而支持indexeddb时他们在做什么 sql搜索代码: // Search entries

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

令我惊讶的是,它显示indexeddb比最简单的sql命令慢得多

由于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);
    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 bug报告,并在那里上传了完整的扩展代码:

(我无法在此上传扩展名zip文件,没有此类功能)


我在websql和indexeddb数据库中分别填充了38862个URL作为测试数据。

回答:你没有做错什么。您的IndexedDB代码是正确的。至于结论,其他人也一样

额外:需要注意的一件有趣的事情是IndexedDB在不同浏览器中的实现方式不同。Firefox使用SQLLite和Chrome LevelDB,因此即使您在FF中使用IndexedDB,您仍然在使用SQL支持的技术,其开销与SQL类似(加上其他一切)


我很想在不同大小的数据库中看到您的结果。我希望,但还不能证实,IndexedDB能够更好地跨更大的数据集扩展(即使38862看起来足够大)。

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

我知道chrome团队因其多进程架构而面临一些挑战。我听说他们最近解决了其中一些问题

因此,我鼓励您尝试所有浏览器的最新版本,可能包括夜间/金丝雀版本


但是请注意,我们并不反对WebSQL,因为IndexedDB更快。我们不赞成WebSQL,因为它不是未来的证明。WebSQL被定义为使用特定的SQLite后端(如果你看一下规范,它实际上写得很清楚)。但是,所有浏览器制造商都需要使用最新版本的SQLite,以便获得安全性、性能和稳定性修复。最新版本总是以微妙的方式更改SQL语法。这意味着我们将以微妙的方式使用web应用程序破坏您的WebSQL。这对我们来说似乎不太好。

令人惊讶的是,只有Mozilla在SQLite上有这样的问题。安卓、iOS、Symbian和数千名其他开发者都喜欢SQLite。chrome和firefox版本的indexeddb是否仍然很慢*相对论Eyea,首先是性能,分片(分片-在一台计算机上???这是bs)现在是安全性-有趣的是索引db在引擎盖下使用SQLite-LoL-但通过这种论证,它不能,因为安全修复和语法更改会破坏IndexedDB。