首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >websql插入速度慢

websql插入速度慢
EN

Stack Overflow用户
提问于 2013-01-16 01:49:21
回答 2查看 1.5K关注 0票数 3

我有大约300条记录需要插入到websql中。我首先编写了300个不带参数的独立tx.executeSql insert语句。

代码语言:javascript
复制
tx.executeSql("INSERT INTO `beerlist` VALUES ('1', '21st Amendment', 'Back in Black IPA', '83', 'IPA', 'A');");

在Chrome上,这需要2毫秒。在Android上运行phonegap,大约需要43,438毫秒。所以我转而使用一些JSON进行迭代&使用prepare语句。如下所示:

代码语言:javascript
复制
var beerList = {"beers":[{"beerid":"1","brewery":"21st Amendment","beername":"Back in Black IPA","bascore":"83","beertype":"IPA","beertable":"A"}}

$.each(beerList.beers, function(i, object) {
                    var insert = 'INSERT INTO beerlist VALUES (?, ?, ?, ?, ?, ?)';
                    tx.executeSql(insert, [object.beerid, object.brewery, object.beername, object.bascore, object.beertype, object.beertable], Beer.successInsert, Beer.failureInsert);
                });

我读到哪里的准备应该更快,但我在Chrome上看到了同样的性能&实际上在Android上的Phonegap性能略差,只有53,559毫秒。我不敢相信要花50秒才能插入300条记录。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-08 22:35:58

您是否在使用多个事务?可能不是你的插入慢,而是事务慢。在单个事务中包装多个执行的速度要快得多。

代码语言:javascript
复制
db.transaction( function(tx){
    for (var i = 0; i < args; i++)
    {
        tx.executeSql(sqlStmnt, args[i]); //args is nested [[1,2],[1,3]]
    }
},
dfd.reject,
dfd.resolve);
票数 4
EN

Stack Overflow用户

发布于 2013-01-16 12:46:56

如您所见,executeSql的success handler是通过事务对象调用的。诀窍是重用事务并发送并行请求。基本上,您使用单个事务,但受控执行多个但很少的异步请求。你应该能够在几毫秒内存储它。

在您的示例中,它是不受控制的。您的所有300个请求在执行之前都会排队。这甚至可能会使浏览器崩溃。

可以在https://bitbucket.org/ytkyaw/ydn-db/raw/master/js/ydn/db/core/req/websql.js中的putObjects方法中找到一个示例实现

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14343685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档