【问题标题】:Angular 2 performance and changeDetection (1000 calls in 5 seconds)Angular 2 性能和 changeDetection(5 秒内调用 1000 次)
【发布时间】:2018-12-11 19:57:13
【问题描述】:

所以基本上,我对 angular 2 很陌生,我接手了一个项目。

我发现应用程序的性能很慢,问题很大。

我无法找出导致性能缓慢的原因。然后我开始注意到很多 ngIf 和 ngFor 的调用函数。当我突然开始从这些函数中记录时,我发现每秒实际上有数百个调用。

我真的没有什么有趣的代码可以展示,但我想知道这是否应该是正常的?

我真的看不出实际代码有什么问题。当然 ngFor 的结果可以保存到一个变量中,但是对 ngIf 做同样的事情有点困难(而且有点没用?)。我阅读了有关 changeDetection 的信息,但我无法确定它应该多久触发一次。

即使不更改网站上的任何内容(只是滚动),对函数的调用也非常多。

【问题讨论】:

    标签: angular performance ngfor angular2-changedetection angular-ng-if


    【解决方案1】:

    是的,有时更改检测会运行 1000 次,尤其是当被操作的 DOM 元素数量很多时。

    例如:对数组的 *ngFor 循环中的更改会破坏整个 DOM 并为列表部分重建它。这里每次都需要运行变更检测。

    虽然这是真的,但您可以遵循一些步骤来避免性能下降。

    1) 在您的 *ngFor 循环上使用 trackBy 这显着提高了性能,因为 angular 尝试仅对数组的已更改/新部分进行更改,而不是拆除和重建再次整个数组。

    你可以在这里看到它的实际效果:angular docs

    2) 不要在字符串插值中使用函数,如下所示:

    <div>the selected color is: {{selectedColor()}}</div>
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我想知道这是否应该是正常的?

      答案是肯定的。

      你将一个函数绑定到你的 ngIf。 Angular 需要跟踪你的函数并尽可能快地渲染条件元素。

      如果您的 ngIf 包含许多指令,那么您做错了什么。

      让您的条件尽可能小,这样ChangeDetection 的性能就不会损害用户体验。

      【讨论】:

        猜你喜欢
        • 2017-10-21
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 2012-04-05
        • 2020-10-20
        • 1970-01-01
        相关资源
        最近更新 更多