2

我有一个相当大的混合 AngularJS / Angular 应用程序,我从 Angular 4 升级到 Angular 5 以摆脱导致 $digests 过多和缓慢的 UpgradeModule。但现在我注意到,在每个 AngularJS XHR 请求中,Angular 5 都会对每个降级的 Angular 5 组件进行更改检测。由于我有相当大的表,其中包含组件,因此更改检测量会激增并导致严重滞后(例如 20 秒而不是 0 秒)。

我在这里读到 NgZone 可以降级并用于限制调用。

但我想知道是否真的需要检查每个 XHR 请求的每个组件?

有没有办法限制这些检查或在 XHR 请求上完全关闭它们?(也许对于某些组件?)

任何其他模式可能有助于解决这个问题?

这是一个概述,显示了由 XHR 请求引起的延迟。 在此处输入图像描述

这是放大视图的细节: 在此处输入图像描述

编辑 它确实有助于在所有组件上将 OnPush 设置为 changeDetection,这似乎是合乎逻辑的。但似乎每个点击事件和 XHR 请求(我将在此处更改为 fetch 以尝试避免它)都会导致 $digest 并且无论如何也会导致相同的调用堆栈(尽管工作量较少)。一个例子是下面的组件:

在此处输入图像描述

@Component({
    selector: "oc-filter",
    templateUrl: "./header-filter.component.html",
    styleUrls: ["./header-filter.component.scss"],
    encapsulation: ViewEncapsulation.None,
    changeDetection: ChangeDetectionStrategy.OnPush
}) 

所以堆栈仍然非常相似: 在此处输入图像描述

Angular 是否仍在遍历所有组件?有没有办法在早期阶段防止这种情况发生?

4

0 回答 0