Firebase は、Angular/Zone モンキー パッチ WebsocketsetInterval
などのために、変更検出をトリガーする多くの内部非同期呼び出しを使用します。アプリを操作していないときでも、常に変更検出のカスケードが発生していることがわかります。特にモバイルでは速度が低下します。
このデフォルトの動作は便利かもしれませんが、現在私が Firebase を使用している方法では、ビューを更新する必要がある時期をかなり厳密に制御できます。そのため、Firebase からのコールバックは、いずれにせよ変更検出が手動で行われるような方法で使用されます。
OnPush
私が取り組んでいる変更検出戦略を に設定すると、ここで役立つことはわかっていますが、あらゆる角度からこれを攻撃したいと考えています。
私はゾーンに精通してrunOutsideAngular
いますが、すべての非同期呼び出しが Firebase モジュール内で発生しているため、ここに適用するかどうかはわかりません。
Firebase に角度ゾーンの外ですべてのビジネスを行わせるにはどうすればよいですか?
編集:問題を示すコード例:
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;
}
}