2016-09-13 14 views
3

一方向のデータバインディングではなく、私のフォームで双方向のdatabind(ng-model)を使用すると、パフォーマンスが悪いかどうかをたくさん調べています。 私は、それぞれの双方向データバインド用の角度1では、新しい時計が作成され、角度1の巨大なアプリケーションでは、これが原因でパフォーマンスの問題が発生する可能性があることを知っています。今私は角度2の場合、データバインドの一方向しか使用しないと、これが何らかの違いを生むかどうかを知る必要があります。 双方向データバインドは、必要でないときは避ける必要がありますか?angular 2必要がない場合、双方向データバインドを避ける必要がありますか?

答えて

1

https://yakovfain.com/2015/12/29/two-way-data-binding-in-angular-2/

2ウェイデータバインディングのインスタンスがありますベストプラクティスが、特にあなたはリアルタイムを必要とする2ウェイUIの更新やその他の珍しい出来事です。ダイジェストでの余分な作業以外の問題は、不要なときにツリーのトラバーサルを引き起こし、最終的にはアプリケーションをわずかに遅くしますが、それらを十分に追加すれば、パフォーマンスへの影響がわかります。それらを使用することを怖がらないでください。その影響は実行時には小さいですが、ベストプラクティスのために一方向のデータバインディングを使用し、変更された検出戦略をプッシュして設定し、手動でオブザーバを手動で処理します。それは簡単なことですが、これを達成できれば、不要なトラバーサルを大幅に減らすことができます。トラバースは超軽量ですが、何かが多すぎると悪いことです。私はアプリケーションに自律性を与えるのが好きではありません。

2

Angular2には実際に双方向データバインディングがありません。

Angular2が有する

データバインディング親から子へ変化検出は、それがchildProp更新parentPropの変化を検出し、子コンポーネントにngOnChanges()コール

[childProp]="parentProp" 

(実装時) 。子から親に

を結合

イベント、子から親への道は、イベントバインディングです。 eventFromChild.emit(someValue)は、子コンポーネントで呼び出され

(childPropChange)="parentProp = $event" 

呼び出し "someActionOnParent()"。これら2

組み合わせが

[(childProp)]="parentProp" 

上に示したデータとイベントのバインディングのためだけ糖衣構文であるこれは、変化検出のみを変更するparentPropをチェックする必要がありますし、気にしないことを意味しもう一方の方向。子コンポーネントから親コンポーネントへの更新は、子コンポーネントによってアクティブに呼び出されなければならず、変更検出を伴わない。

この単方向データフローにより、Angular2の変更検出は非常に効率的です。変更検出をさらに最適化するには、コンポーネント内でChangeDetectionStrategy.OnPushを使用します。これにより、Angular2が実際に変更検出を行う必要があるツリーをプルーニングすることができます。

+0

私は間違ったことを提案していませんが、これはコンポーネントの真実ではありませんか?このインスタンスでは、ngmodelを使用して、入力を渡すかイベントを送出することがわかっているコンポーネントはありませんので、onchangesは現在のコンポーネントでのみ起動します。 –

+0

あなたのコメントを完全に理解していますか。 'ngModel'はディレクティブであり、ディレクティブと同じです。コンポーネントとディレクティブの唯一の違いは、コンポーネントにはビューがあることです。 –

+1

真。私は内蔵ディレクティブが@ディレクティブではなく魔法のように感じられると思います。面白い。レッスン –

関連する問題