帖子
帖子
用户
博客
课程
显示全部楼层
20
帖子
0
勋章
296
Y币

[BUG] 关于db模块的问题

[复制链接]
发表于 2015-4-13 16:07:59
在ios上db执行速度非常的慢!
2015-04-13 16:03:57Array================================================2015-04-13 16:03:57executesqlstartMon Apr 13 2015 16:04:00 GMT+0800 (CST)================================================2015-04-13 16:03:57querysqlstartMon Apr 13 2015 16:04:00 GMT+0800 (CST)================================================2015-04-13 16:03:57Array================================================2015-04-13 16:03:58querysqlendMon Apr 13 2015 16:04:01 GMT+0800 (CST)================================================2015-04-13 16:03:59executesqlendMon Apr 13 2015 16:04:02 GMT+0800 (CST)

这是一组执行查询sql有2s,执行sql也有2s
2015-04-13 16:04:02querysqlstartMon Apr 13 2015 16:04:05 GMT+0800 (CST)================================================2015-04-13 16:04:05querysqlendMon Apr 13 2015 16:04:08 GMT+0800 (CST)================================================
这又是一组数据,查询sql有3s

而在安卓上2015-04-13 16:07:01executesqlstartMon Apr 13 2015 16:07:01 GMT+0800 (CST)================================================2015-04-13 16:07:01querysqlstartMon Apr 13 2015 16:07:01 GMT+0800 (CST)================================================2015-04-13 16:07:01querysqlendMon Apr 13 2015 16:07:01 GMT+0800 (CST)================================================2015-04-13 16:07:01executesqlendMon Apr 13 2015 16:07:01 GMT+0800 (CST)================================================2015-04-13 16:07:01querysqlstartMon Apr 13 2015 16:07:01 GMT+0800 (CST)================================================2015-04-13 16:07:01
这组数据几乎在1s内完成。

这非常重要!!!!!!


用 事务 或者  批量查询的语句,代替for 循环 来进行批量操作
20
帖子
0
勋章
296
Y币
技术支持-Altair 发表于 2015-4-13 16:13
用 事务 或者  批量查询的语句,代替for 循环 来进行批量操作

用 事务查询是什么意思呢?
批量插入 我之前测试了,不支持values(),(),()这种形式


我这只是查询操作,没有进行批量操作!批量操作 我是做了缓存,用数组渲染数据的!就是在查询这快卡住了!
20
帖子
0
勋章
296
Y币
解决了没?我项目急!
  1. var db = api.require('db');

  2. var dbName = "apicloud";

  3. db.openDatabase({
  4.     name: dbName
  5. }, function(ret, err){
  6.     if( ! ret.status){
  7.         toast(err.msg);
  8.         return;
  9.     }

  10.     /* 创建数据表 */
  11.     var sql = "CREATE TABLE  IF NOT EXISTS `Module`(`id` int, `name` varchar(255), `brief` varchar(255), `sortId` int)";

  12.     db.executeSql({
  13.         name: dbName,
  14.         sql: sql
  15.     }, function(ret, err){
  16.         if( ! ret.status){
  17.             toast(err.msg);

  18.             return;
  19.         }

  20.         /* 插入数据 */
  21.         var sql = "insert into Module (id,name,brief,sortId) values('0', 'multiSelector', '自定义数据源的多项选择器', '0'),('1', 'shakeView', '支持自定义摇一摇效果页', '0'),('2', 'listContact', '联系人列表,可自定义联系人数据源', '0')";

  22.         db.executeSql({
  23.             name: dbName,
  24.             sql: sql
  25.         }, function(ret, err){
  26.             if( ! ret.status){
  27.                 toast(err.msg);

  28.                 return;
  29.             }

  30.             /* 查询数据 */
  31.             var sql = "SELECT * FROM Module";

  32.             db.selectSql({
  33.                 name: dbName,
  34.                 sql: sql
  35.             }, function(ret, err){
  36.                 if( ! ret.status){
  37.                     toast(err.msg);
  38.                 }

  39.                 api.alert({
  40.                     title: "数据库操作结果",
  41.                     msg: JSON.stringify(ret.data)
  42.                 });
  43.             });

  44.         });
  45.     });

  46. });

  47. /* toast提示 */
  48. function toast(msg){
  49.     api.toast({
  50.         msg: msg,
  51.         duration: 1000,
  52.         location: "top"
  53.     });
  54. }
复制代码

这是一个 最小化的例子,不存在您说的问题, 速度也远远快于 您说的 2 ~ 3 s; 请自行检查 代码逻辑. 建议,也做一个 最小的 db 示例,排查问题所在
20
帖子
0
勋章
296
Y币


这个是ios端的测试2015-04-15 01:00:59pagestartWed Apr 15 2015 01:01:04 GMT+0800 (CST)================================================2015-04-15 01:00:59querysqlstartWed Apr 15 2015 01:01:04 GMT+0800 (CST)================================================2015-04-15 01:00:59Array================================================2015-04-15 01:00:59Array================================================2015-04-15 01:00:59querysqlendWed Apr 15 2015 01:01:05 GMT+0800 (CST)================================================2015-04-15 01:00:59executesqlstartWed Apr 15 2015 01:01:05 GMT+0800 (CST)================================================2015-04-15 01:01:01pageWed Apr 15 2015 01:01:07 GMT+0800 (CST)================================================2015-04-15 01:01:02executesqlendWed Apr 15 2015 01:01:08 GMT+0800 (CST)================================================

这个是安卓端的测试2015-04-15 01:01:54pagestartWed Apr 15 2015 01:01:54 GMT+0800 (CST)================================================2015-04-15 01:01:54querysqlstartWed Apr 15 2015 01:01:54 GMT+0800 (CST)================================================2015-04-15 01:01:54Array================================================2015-04-15 01:01:54Array================================================2015-04-15 01:01:55querysqlendWed Apr 15 2015 01:01:54 GMT+0800 (CST)================================================2015-04-15 01:01:55executesqlstartWed Apr 15 2015 01:01:54 GMT+0800 (CST)================================================2015-04-15 01:01:55pageWed Apr 15 2015 01:01:54 GMT+0800 (CST)================================================2015-04-15 01:01:55executesqlendWed Apr 15 2015 01:01:54 GMT+0800 (CST)================================================

可以看出相同的代码在ios端比安卓要慢2-3s。既然执行sql语句的时间差不多,问题出现在夸页面执行函数上api.execScript({});
105
帖子
2
勋章
1万+
Y币
收藏。。。。。。。
您需要登录后才可以回帖 登录

本版积分规则