11

this questionthis answerから、式を使用すると値が毎回ゼロから評価されるようになります。しかし、ドキュメントとチュートリアルを検索しましたが、このステートメントのリファレンスは見つかりませんでした。

私の考えでは、両方とも a でラップされている$watch()ため、$digest()サイクルが実行されると、ng-bindまたは内の値{{}}が変更されたかどうかがわかります。

パフォーマンスに関して、提案されているng-bindよりも優れ{{}}ているのはなぜですか?また、リファレンスはどこにありますか?

4

2 に答える 2

15

このような詳細は、ドキュメントで常に利用できるとは限りません。ソースを読む必要があります。覗いてみたところ、(2014 年 11 月 24 日現在) どちらも非常によく似た方法で動作しているようです。どちらも、必要に応じて値を変更するために単一のディレクティブがインスタンス化されます (カーリー補間ディレクティブはその場で生成されます)。

両方のディレクティブは、関連する式$digestをすべて他のものと同様に評価します。主な違いは、ng-bind は値に対してそれ以上の処理を行いませんが、カーリーを使用すると、補間されたテキスト全体がダイジェストごとに再計算されることです。基本的に、文字列は and を使用して構築され$interpolate、それが前の値と比較されます (これは の内部で発生します$digest)。値 (単純な値ng-bindまたはカーリーを使用した補間結果) が変更されていない場合、どちらの方法でも DOM は更新されません。

私にとって、その質問に対する受け入れられた回答は、使用するより説得力のある理由ng-bindです。つまり、ng-cloak などのハックに頼ることなく、Angular がそれらをロードしてコンパイルする前に、テンプレート タグの目に見えるフラッシュを防ぐために使用できます。

変数によっては、カーリー補間の方が実際にはパフォーマンスが高い場合もあります。私が考えることができる状況の 1 つは、補間の代わりに ng-bind を使用すると、そうでなければ冗長な<span>要素を多数作成する必要があり、それによってスケールが逆方向に傾く場合です。また、インスタンスごとに 1 つのウォッチャーを作成する ng-bind とは対照的に、補間式を使用すると、使用する変数の数に関係なく、文字列全体に対して単一のウォッチャーが作成されます。

ただし、いつものように、早い段階でパフォーマンスを最適化しないでください。最適化する場合は、プロファイルを作成して、本当に重要な部分を見つけてください。

于 2014-11-24T02:52:04.303 に答える
1

ng-bind と {{}} の主な違いは、ng-bind は渡された変数 (つまり、上記の例の名前) のウォッチャーを作成するのに対し、中かっこ ({{}}) は (式全体をメモリ、つまり}不要な場合でも、すべてのダイジェスト サイクルで式のダーティ チェックとリフレッシュを実行します。ng-bind は、渡された値が実際に変更されている場合にのみ適用されます。詳細については、以下のリンクを参照してください: http://www.ufthelp .com/2015/11/difference- between-and-ng-bind-in.html

于 2016-06-22T03:24:28.860 に答える