Javascript 移动设备上角度滤波器的性能限制
我有3000个对象,每个对象都有许多属性,创建了一个72000行2MB JSON文件 JSON实际上是一个对象数据库,需要通过文本搜索过滤器进行过滤,也需要通过将值与值数组进行匹配来过滤 在初始视图中,我在我的Javascript 移动设备上角度滤波器的性能限制,javascript,json,angularjs,firebase,ionic-framework,Javascript,Json,Angularjs,Firebase,Ionic Framework,我有3000个对象,每个对象都有许多属性,创建了一个72000行2MB JSON文件 JSON实际上是一个对象数据库,需要通过文本搜索过滤器进行过滤,也需要通过将值与值数组进行匹配来过滤 在初始视图中,我在我的服务中执行此操作: this.loadJsonFile = function(url, process) { var defer = $q.defer(); if (angular.isDefined(cache[url])) { if (angular.i
服务中执行此操作
:
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;
以前我每次需要搜索时都不打电话给服务器,因为打电话的次数会很高!这在iPadAir 2和iPhone6上都能正常工作,但在Galaxy标签上却很差
我需要一个策略上的帮助,即只向$scope
公开有限数量的结果,因为我认为被过滤和搅动的数据量是导致我表现不佳的原因。我很满意搜索/过滤功能的运行,打破了实时搜索功能的无缝特性,只要结果暴露在$scope
(加载屏幕后)中,性能就非常出色
考虑到服务器的情况,我不想使用Parse.com服务器,因为它的角度不友好,但是Firebase的异步特性可能会起作用。我只是上传了我的JSON,并通过以下方式将数据附加到$scope:
var ref = new Firebase("https://URL_HERE.firebaseio.com/results");
$scope.allExercises = $firebaseArray(ref);
这与我的本地JSON方法非常相似。但是,我想知道是否可以使用Firebase执行以下操作
$scope
中公开的值和结果查询Firebase上的数据请花点时间检查一下。这将避免许多已经得到回答的问题
ref.orderByChild('name').limitToFirst(50);
ref.orderByChild('name').startAt(searchString).limitToFirst(50);
请注意,Firebase查询不支持通配符搜索。有关更多信息,请参阅请花点时间检查一下。这将避免许多已经得到回答的问题
ref.orderByChild('name').limitToFirst(50);
ref.orderByChild('name').startAt(searchString).limitToFirst(50);
请注意,Firebase查询不支持通配符搜索。有关更多信息,请参阅请花点时间检查一下。这将避免许多已经得到回答的问题
ref.orderByChild('name').limitToFirst(50);
ref.orderByChild('name').startAt(searchString).limitToFirst(50);
请注意,Firebase查询不支持通配符搜索。有关更多信息,请参阅请花点时间检查一下。这将避免许多已经得到回答的问题
ref.orderByChild('name').limitToFirst(50);
ref.orderByChild('name').startAt(searchString).limitToFirst(50);
请注意,Firebase查询不支持通配符搜索。有关更多信息,请参阅您的问题是,您的数据上的观察者数量非常多,而拥有自动过滤器会创建更多被调用两次的观察者 我建议您实现一个数据库和一个搜索功能 对于免费的解决方案(因为FireBase是付费的),我建议您使用带有
这在android和ios上运行得相当好,在Windows Phone上也有一些工作;) 您的问题是,您的数据上的观察者数量非常多,而拥有自动过滤器会创建更多被调用两次的观察者 我建议您实现一个数据库和一个搜索功能 对于免费的解决方案(因为FireBase是付费的),我建议您使用带有
这在android和ios上运行得相当好,在Windows Phone上也有一些工作;) 您的问题是,您的数据上的观察者数量非常多,而拥有自动过滤器会创建更多被调用两次的观察者 我建议您实现一个数据库和一个搜索功能 对于免费的解决方案(因为FireBase是付费的),我建议您使用带有
这在android和ios上运行得相当好,在Windows Phone上也有一些工作;) 您的问题是,您的数据上的观察者数量非常多,而拥有自动过滤器会创建更多被调用两次的观察者 我建议您实现一个数据库和一个搜索功能 对于免费的解决方案(因为FireBase是付费的),我建议您使用带有
这在android和ios上运行得相当好,在Windows Phone上也有一些工作;) 因此,我构建了一个ionic应用程序,需要使用一个118MB的JSON文件,其中包含18000多个条目。我所做的是将所有内容放入mongo DB中,然后查询它。它速度非常快,可以与nodejs/express服务器配合使用,也可以直接从应用程序查询数据库。我还没有看过firebase,但如果你想找一个快速、直接、javascript友好的数据库,我会去mongolab.com看看。非常感谢你的评论。您能在服务器设置上稍微扩展一下吗?我以前没有使用过nodejs/express。是的,所以我有一个节点服务器。快车是用来定路线的。在连接到数据库的节点服务器中,创建类似www.website.com/api/:param的路径。该参数用于查询mongo数据库。我会拿一个战利品在这开始。您可以为您的mongo DB创建一个restful api,因为它都是javascript和JSON对象,您还可以使用mongo在服务器端运行函数。因此,一旦数据被传递到节点服务器,您就可以让一个函数在发送给客户端之前对其进行排序,如果您想查看使用此功能的应用程序的执行情况,请在play store上查看my app is Sidekick for elite Hazard。对于拥有如此庞大的数据库,查询实际上是超快速的。现在我的服务器是hos