我有一个相当大的混合 AngularJS / Angular 应用程序,我从 Angular 4 升级到 Angular 5 以摆脱导致 $digests 过多和缓慢的 UpgradeModule。但现在我注意到,在每个 AngularJS XHR 请求中,Angular 5 都会对每个降级的 Angular 5 组件进行更改检测。由于我有相当大的表,其中包含组件,因此更改检测量会激增并导致严重滞后(例如 20 秒而不是 0 秒)。
我在这里读到 NgZone 可以降级并用于限制调用。
但我想知道是否真的需要检查每个 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 是否仍在遍历所有组件?有没有办法在早期阶段防止这种情况发生?