Javascript 移动设备上角度滤波器的性能限制

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

我有3000个对象,每个对象都有许多属性,创建了一个72000行2MB JSON文件

JSON实际上是一个对象数据库,需要通过文本搜索过滤器进行过滤,也需要通过将值与值数组进行匹配来过滤

在初始视图中,我在我的
服务中执行此操作

  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执行以下操作

  • 加载按名称排序的初始50个结果
  • 在文本搜索中键入时,将执行查询,并将结果传递给$scope
  • 向筛选器数组添加值时,会根据
    $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