【发布时间】:2015-05-06 19:28:05
【问题描述】:
我正在使用 ionic 框架制作应用程序,并且正在使用 sqlite 存储大约 150 行的列表。每行有两个属性,ID 和 Name。
现在我正在使用运行查询的数据库工厂检索这些数据。
它可以工作,但是当我在我的 Galaxy Tab 3 上测试它时,加载列表大约需要 5-10 秒,一旦它加载列表,它在列表项中滚动超级滞后。
这是我的控制器
.controller('ActionSearchCtrl', function($scope, ActionSearchDataService, DBA, $cordovaSQLite){
var tablet = true;
var query = "select action FROM actions;";
$scope.items = [];
$scope.runSQL = function(){
DBA.query(query).then(function(result){
$scope.items = DBA.getAll(result);
});
};
if(tablet){$scope.runSQL()};
这是我的数据库工厂
.factory('DBA', function($cordovaSQLite, $q, $ionicPlatform) {
var self = this;
// Handle query's and potential errors
self.query = function (query, parameters) {
parameters = parameters || [];
var q = $q.defer();
$ionicPlatform.ready(function () {
$cordovaSQLite.execute(herbsDatabase, query, parameters)
.then(function (result) {
q.resolve(result);
}, function (error) {
console.warn('I found an error');
console.warn(error);
alert(error.message);
q.reject(error);
});
});
return q.promise;
}
// Proces a result set
self.getAll = function(result) {
var output = [];
for (var i = 0; i < result.rows.length; i++) {
output.push(result.rows.item(i));
}
return output;
}
// Proces a single result
self.getById = function(result) {
var output = null;
output = angular.copy(result.rows.item(0));
return output;
}
return self;
})
所以查询返回大约 150 个条目,我需要全部在一个页面上(我已经研究了无限滚动和分页,但我的客户想要在一页上的所有项目,所以这不是一个选项。从我读过的内容来看, 150 个条目对于观察者来说应该不会太慢, 因为我使用 ng-repeat 来显示列表项. 如果有人有办法我可以使用cordovaSQLite插件显示这么多项目, 让列表功能更快让我知道!目前该列表几乎无法使用,我也在其他设备上尝试过,结果相同。
我还尝试在控制器中创建大约 200 个虚拟对象(无需调用 db 来获取数据)并且性能很好。这就是为什么我认为这是一个 SQLite 性能问题。这是我在这里的第一篇文章,如果我不够清楚,请道歉。
【问题讨论】:
-
不使用插件可以试试吗?
-
没有插件是什么意思?我创建了不使用数据库并且工作正常的虚拟数据。我不确定你是不是这个意思?
标签: android angularjs sqlite ionic-framework ionic