のような乗算関数がありcount()
getTotal()
ます。何かが変更された場合、これらすべての計算関数を実行する必要がありますcart/object
。現在、私はのようなビューでそれらを使用しています{{count()}}
。したがって、これらの関数はすべて複数回実行されています。これらの関数は、ダーティチェックのために複数回呼び出されると思います。これは正しいです?
今私は$watch
関数について読みましたが、パフォーマンスの問題のため、それを避けるようにしてください。とにかく私はそれをテストしたいと思っていまし$watched
たcart
。ログに記録されるのは1 回だけであることがわかったので、そこにあるすべての計算関数を呼び出して、計算結果にバインドする$watch
方が高速ではないでしょうか?cart
私はそれが同じ動作をするだろうと思っていたので、少し混乱しています。$watch
もダイジェスト ループを通過するためです。
似たような質問がすでにたくさんあることは知っていますが、誰かが私のケースについてそれほど難しくない英語で直接説明してくれると、ずっと簡単になります.
例: パフォーマンスが優れているのはどれですか? なぜ?両方の亜種が消化サイクルを通過しますか? では、なぜバリアント 2 は 10 回ログに記録し、バリアント 1 は 1 回しかログに記録しないのでしょうか?
バリアント 1
// bind these to scope and show like {{totalGross}}
cartService.totalGross = null;
cartService.totalNet = null;
cartService.totalItems = null;
// watch the cart here and update all variables
$rootScope.$watch(function () {
return cartService.cart;
}, function(){
cartService.totalGross = cartService.getCartTotalGross();
cartService.totalNet = cartService.getCartTotalNet();
cartService.totalItems = cartService.getTotalItems();
}, true);
バリアント 2
// bind these to scope and show like {{getCartTotalGross()}}
cartService.getCartTotalGross();
cartService.getCartTotalNet();
cartService.getTotalItems();
私自身の質問に答えようとしていますが、それが正しいかどうかはわかりません。
バリアント 1では、もう 1 つのウォッチャーがありますが、関数の代わりに値を監視するだけで、カートを で手動で監視するため、もう 1 つ監視し$watch
ます。しかし、ウォッチャーの計算はそれほど重くありません。
バリアント 2関数が返す値を監視しているため、関数は同じ値を複数回計算する必要があり、魔女はより重いです。各ダイジェスト サイクルで UI が更新されます
これは正しいです?では、バリアント 1 の方がパフォーマンスが優れているのでしょうか?