Firebase 使用大量内部异步调用来触发更改检测,因为 Angular/Zone 猴子修补 websocketsetInterval
等。即使我没有与我的应用程序交互,我也看到一连串的更改检测一直在发生,这有助于放慢速度,尤其是在移动设备上。
这种默认行为可能很有用,但是我现在使用 Firebase 的方式我可以非常严格地控制何时需要更新视图,因此 Firebase 的回调以这样一种方式使用,即无论如何都会手动进行更改检测。
我知道将更改检测器策略设置为OnPush
将对此有所帮助,我正在努力,但我想从各个角度进行攻击。
我熟悉区域,runOutsideAngular
但现在不确定是否在此处应用它,因为所有异步调用都发生在 Firebase 模块中。
如何让 Firebase 在 Angular 区域之外开展所有业务?
编辑:显示问题的示例代码:
import {Component} from '@angular/core';
@Component({
selector: 'test-component',
template: 'hello world'
})
export class TestComponent {
ref: Firebase;
constructor() {
this.ref = new Firebase('<firebase URL>');
}
ngDoCheck() {
console.log('Check the stack - this is being called continually via async functions used internally by Firebase.');
debugger;
}
}