【发布时间】:2015-05-29 15:50:38
【问题描述】:
我有 3000 个对象,每个对象都有许多属性,创建了一个 72,000 行 2MB 的 JSON 文件。
JSON 实际上是一个对象数据库,需要通过文本搜索过滤器以及通过将值与值数组进行匹配来进行过滤。
在初始视图中,我在 service 中执行此操作:
this.loadJsonFile = function(url, process) {
var defer = $q.defer();
if (angular.isDefined(cache[url])) {
if (angular.isDefined(cache[url]['then'])) {
return cache[url];
}
defer.resolve(cache[url]);
return defer.promise;
}
$http.get(url).success(function(data) {
if (process) {
data = process(data);
}
cache[url] = data;
defer.resolve(data);
}).error(function(err){
defer.reject(err);
});
cache[url] = defer.promise;
return defer.promise;
};
this.getExercises = function() {
return this.loadJsonFile('data/exercises.json');
};
在我的控制器中,所有结果都通过以下方式暴露给$scope:
api.getExcercises().then(function(data) {
$scope.allExercises = data.results;
});
我将结果限制为:
$scope.limit = 56;
以前我每次需要搜索时都避免调用服务器,因为调用次数会非常多!这在有足够电量的 iPad Air 2 和 iPhone 6 上运行良好,但在 Galaxy Tab 上却很差。
我需要有关仅将有限数量的结果暴露给$scope 的策略的帮助,因为我认为被过滤和搅动的大量数据导致我的表现不佳。只要结果暴露给$scope(在加载屏幕之后说)性能非常出色,我就可以运行搜索/过滤功能并打破实时搜索功能的无缝性质。
查看服务器情况,我并不热衷于访问我的 Parse.com 服务器,因为它对 Angular 不友好,但 Firebase 的异步特性可能会起作用。我只是上传了我的 JSON 并通过以下方式将数据附加到 $scope:
var ref = new Firebase("https://URL_HERE.firebaseio.com/results");
$scope.allExercises = $firebaseArray(ref);
这与我的本地 JSON 方法非常相似。但是我想知道是否可以使用 Firebase 执行以下操作?
- 加载按名称排序的初始 50 个结果。
- 在文本搜索中键入时,会执行查询并传递 $scope 的结果。
- 向过滤器数组添加值时,会根据暴露给
$scope的值和结果查询 Firebase 上的数据。
【问题讨论】:
-
所以我构建了一个 ionic 应用程序,需要使用一个 118MB 的 JSON 文件,其中包含超过 18000 个条目。我所做的就是将它全部放入一个 mongo DB 中,然后查询它。它非常快,并且与 nodejs/express 服务器配合得非常好,或者您可以直接从应用程序查询数据库。我没有研究过 firebase,但如果您正在寻找一个快速、直接且对 javascript 友好的数据库,我会查看 mongolab.com
-
杰西非常感谢您的评论。你能扩展一下你的服务器设置吗?我之前没用过nodejs/express。
-
是的,所以我有一个节点服务器。 Express 用于制作路线。在您连接到数据库的节点服务器中,创建一个类似 www.website.com/api/:param 的路径。传入参数,用于查询mongo数据库。我会在这个开始。您几乎为您的 mongo DB thejackalofjavascript.com/… 制作了一个宁静的 api
-
都是javascript和JSON对象,你也可以使用mongo来运行服务器端的函数。因此,一旦将数据传递到节点服务器,您就可以在将其发送到客户端之前对其进行排序
-
如果你想看看使用它的应用程序如何执行我的应用程序是Sidekick,用于 Play 商店中的精英危险。对于拥有如此庞大的数据库,查询实际上非常快。到目前为止,我的服务器托管在 heroku 上,我的数据库托管在 mongolab 上。
标签: javascript json angularjs firebase ionic-framework