【问题标题】:How to deal with big data in Angular如何在 Angular 中处理大数据
【发布时间】:2013-10-14 02:18:03
【问题描述】:

我有一个完成的 AngularJS 应用程序,它基本上显示了一个表,其中包含通过 $resources 加载的许多 (400+) 行。数据是可排序和可搜索的,应用程序加载速度有点慢(2s+),是的,我使用了$cacheFactory。我瘦了,是内存问题。

我想只加载 100 个条目并在搜索、排序或滚动后自动重新加载。这会加快应用程序的速度,但会使搜索和排序变得非常缓慢。

你会如何在 Angular 中处理这个问题?

【问题讨论】:

  • 400+ 行数据网格什么都不是。
  • 您可以让我们AngularJS Batarang 检查这只是显示所有条目(最有可能)或将它们保存在内存中的问题。
  • 假设您使用ng-repeat 来显示数据,这个问题也可能取决于您使用的Angular.js 版本。 ng-repeat 在 1.2 中变得更快了。但你的问题含糊不清,实际上给出了答案。
  • 还有更多。有多少列?您是否在表格中包含繁重的 DOM 元素(例如复选框),并且您是否进行了任何进一步的操作?
  • 根据你的情况,你可能会喜欢这样:binarymuse.github.io/ngInfiniteScroll

标签: javascript angularjs xmlhttprequest


【解决方案1】:

在处理大型数据集时,在决定哪些数据应该是双向数据绑定时需要非常小心,否则你会用 $watch 表达式压倒 DOM 和 cpu。

我创建了一组指令,只在需要的地方绑定一次数据。

这是我制作的三个链接,应该会有所帮助:

https://gist.github.com/btm1

set-attr - 在一个元素上设置任何属性一次,并且不添加一个监视监听器。您可以使用它来设置类或数据属性或 ID

set-if - 使用它来代替显示、隐藏或切换。这是一个 if 语句,只计算一次,并且会从 DOM 中删除项目

set-repeat - 这个太棒了,特别是如果你重复的内容不会改变,所以它只会迭代一次。

我创建了其他 set-text、set-html、set-href、set-source,我发现我经常使用它们,因为大多数数据不需要双向数据绑定。

【讨论】:

  • 感谢您的回答。我将在今天或明天测试这些指令。我想知道为什么 Angular 没有内置它们。
  • np 如果您觉得有帮助,请投票给我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2014-06-12
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多