【发布时间】:2014-08-30 09:08:15
【问题描述】:
在以下情况下,我遇到了 Angular 的性能问题:
<div ng-repeat="a in array">
<input ng-model="something">
</div>
我在我的控制器中编写了代码,在ng-click 上将数组更改为具有一组不同的对象。问题是,如果数组有相当数量的对象,那么点击就没有我想要的那么灵敏(短暂的延迟)。
经过一番调查,我注意到在我更改 ng-click 中的数组后,$digest 需要很长时间。所以我创建了这个short test code 来重现它。
真正的应用场景是这样的:我有一个表格,其中每一行代表一个可编辑的对象,每个对象都有许多我希望能够编辑的不同字段。这样,每当我点击表格中的一行时,就会有另一个 html 包含所有 ng-repeats 和我的对象属性上的不同 inputs。
有人知道如何提高效率吗?
谢谢
【问题讨论】:
-
创建一个真实的演示,展示您实际在做什么。当我们看不到任何代码时,谁能让您的代码更有效率?
-
嗯,你是对的,但是我的例子太复杂了,不能放在这里解释,所以我试着把它缩小到真正的问题,那就是:为什么这比当我删除 ng-model 属性时(我理解开销,但不明白为什么它应该这么大)
-
但如果您看到视觉延迟,您可能会做一些不是最佳实践的事情
-
我将尝试简要描述我的生产代码。我有一个画布,其中包含您可以选择和拖动的对象,并且此画布以某种方式限制为有角度的。当您开始拖动一个对象并且 cpu 甚至需要 50 毫秒才能运行时,您的应用程序会出现一个小的延迟,您会感觉到它比点击时感觉要多得多。发生这种情况的原因是因为当我开始拖动时 - 对象被选中(通过在范围内设置一个变量)和另一个观察该对象开始呈现自身的指令(这让我想到了我提出的问题),在另一条评论中继续...
-
您是否尝试过在 Chrome 上使用batarang 来更好地了解为什么需要这么长时间?您可以分析性能并查看哪些特定任务比其他任务花费的时间更长。
标签: javascript performance angularjs