我应该在Angular应用程序中将10,000行加载到内存中吗?

时间:2014-03-09 23:10:08

标签: javascript php mysql angularjs angularjs-scope

我正在Angular.js中构建一个客户管理工具,将10,000个客户加载到$scope。从那里我可以搜索并操纵任何数据,而无需调用服务器(与我刚刚调用一个小数据集并使用分页相比)。

但是现在,一旦数据加载到示波器中,我的浏览器就会严重崩溃或滞后。将10,000个客户数据加载到作用域中是否存在问题,或者我的代码是否有问题(在操作数据时,例如在我实施自动建议的情况下)?

2 个答案:

答案 0 :(得分:1)

  1. 全押$scope可能会崩溃
  2. 数据存在风险
  3. 我建议使用MySQL查询直接搜索。我只想提一下,如果正确编制索引,那么10,000个项目实际上并不是很多需要时间才能找到的数据。

答案 1 :(得分:1)

我过去不得不处理这样的事情。大量的数据,如果你把它放在范围上,那么ng-repeat会杀死浏览器,因为它试图绘制10,000个节点。这就是我做的。

我还在$ scope中添加了一个'limit'变量:

$scope.limit = 20;

然后在ng-repeat中使用该限制:

ng-repeat="thing in things | limitTo:limit"

然后它只显示10,000个中的一定数量,而不是全部。这将大大提高您的表现。然后,您将需要添加一个ng-scroll事件,将限制增加10.在您的东西的容器上,添加一个ng-scroll。

<div ng-scroll="increaseLimit()">
    <span ng-repeat="thing in things | limitTo:limit"><!--Your template--></span>
</div>

现在实现increaseLimit方法:

$scope.increaseLimit = function(){
    $scope.limit += 10;
}

这将允许您滚动浏览您的内容,而不会删除您的页面。让我知道你的想法。

另一个建议是,如果你正在对你的巨型客户阵列进行任何过滤,你应该使用lodash。 Lodash有一些疯狂的表现,可以让你做所有的过滤。