7

性能选项卡上的 Batarang 显示,在应用程序的根目录上,angular 正在调用如下所示的函数: function (a){var e,f,i=a.$eval(h),m=hc(i,.

根据 batarang 的说法,它的速度非常慢,当我在应用程序上获得更多行时,它会减慢应用程序的速度并导致 Firefox 崩溃(尽管 Chrome 仍然可以处理它)。那么它到底在做什么呢?我该如何解决?

4

2 回答 2

16

在构建动态扩展 ngRepeat 内容的 Angular 应用程序时需要考虑的事项。您设置的每个 ngRepeat 都会设置一个手表。您在该重复中执行的每个 {{binding}} 或 ngModel 都会设置另一个手表,依此类推。这些中的每一个都创建函数和对象实例,并且还需要在每个 $digest 上进行处理。因此,如果您遇到性能问题,您可能需要实现一个自定义指令,该指令在不设置那些多余的手表的情况下写出您的数据,因此您的性能会更高一些。那是我的 2 美分。

于 2013-01-23T18:17:22.263 回答
2

因此,当我遇到我认为类似的问题时,我在被问到这个问题后的几个月里偶然发现了这个问题。让我描述一下我的问题和我的解决方案(不涉及指令),您可以看看它是否适用于您的问题。

我正在建一张桌子。首先我会请求信息告诉我表格中有哪些行,然后我会请求更多信息来填充表格的单元格。所以我会得到第一个请求并将所有行添加到表中,然后请求单元格数据。我会逐行获取单元格数据,但在一个大表中,这仍然是很多请求。当我取回该行的单元格数据时,我会填写它。

这产生了一个非常酷的效果,所有带有旋转图标的单元格都在等待数据。但是,它让它真的很慢。在 Chrome 中,这很好,浏览器会减慢一些速度,但它会继续工作。但在 FF 中,它会收到烦人的“脚本忙或没有响应”消息。如果您单击“继续”,它会正常工作,但如果您单击“取消”,您将停止脚本并且没有任何效果。

所以,这是我想出的解决方案。不需要指令。我所做的只是完全构建每一行的数据,然后才将该行添加到 ng-repeat 使用的变量中。这种方式要快得多。这些行在取回所有数据时填充,$watch 仍然存在,但您不会一次触发大量它们,您仍然可以让它们能够稍后更改数据(在我的表中,您可以编辑表格的每个单元格,以便以后能够轻松更改数据很重要)。

希望这可以帮助某人。

于 2013-09-12T18:18:18.267 回答