我有乘法函数,如count()
getTotal()
. 如果我的cart/object
. 目前我在视图中使用它们,例如{{count()}}
. 所以所有这些功能都在运行多次。我认为这些函数被称为多次,因为脏检查。它是否正确?
现在我阅读了有关该$watch
功能的信息,并且由于性能问题,您应该尽量避免使用它。无论如何,我想测试它,$watched
我的cart
. 我发现它只记录一次$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 的性能更好吗?