Performance 在Angularjs中,I$apply/render可以一次应用/呈现一个范围吗?

Performance 在Angularjs中,I$apply/render可以一次应用/呈现一个范围吗?,performance,angularjs,Performance,Angularjs,我有一个相当复杂的应用程序,有很多不同的组件,经常更新。例如,一个时钟 是否可以一次仅在页面的一个子部分上调用$apply/$digest?例如,我不想为每一个时钟滴答声给页面上的每个观察者打电话 我知道我可以通过完全绕过$scope.$apply,并在指令中手动更新时钟元素来实现这一点。我还有希望吗 编辑:实际上,看起来我想要的是从我想要检查的范围开始,而不是从$apply开始,dun$digest,因为$apply启动$rootScope上的摘要。这是一种有效的方法吗 无论何时调用$scop

我有一个相当复杂的应用程序,有很多不同的组件,经常更新。例如,一个时钟

是否可以一次仅在页面的一个子部分上调用$apply/$digest?例如,我不想为每一个时钟滴答声给页面上的每个观察者打电话

我知道我可以通过完全绕过$scope.$apply,并在指令中手动更新时钟元素来实现这一点。我还有希望吗

编辑:实际上,看起来我想要的是从我想要检查的范围开始,而不是从$apply开始,dun$digest,因为$apply启动$rootScope上的摘要。这是一种有效的方法吗


无论何时调用
$scope.$apply()
它也会在该范围内的所有作用域上调用
$apply()
。如果要在页面的有限部分上调用
$apply()
,则该部分需要有自己的作用域,可以通过向页面的该部分添加控制器来实现。然后,您可以使用该控制器在节控制器上使用
$scope.apply()
更新页面该节中的作用域

--编辑-- 有关$apply和$digest之间差异的更多详细信息,请参见下面的注释

另见:


如果您的组件确实是解耦的,那么您可以隔离那些在自己的angular应用程序实例中生成频繁更新的组件。它们将有独立的消化周期

你的应用程序仍然可以进行通信,但需要更多的开销

为了拥有2个应用程序,您必须手动启动应用程序(使用
bootstrap
而不是
ng-app


请参见此示例:

我就是这么想的,但这里有一个plunker演示,它提出了其他建议:该演示可能会在$apply和$digest之间造成一些混淆。在$apply()的末尾,它将调用$rootScope上的$digest()。因为演示会更新$rootScope.foo的值,如果调用$scope.$apply(),那么$rootScope也会消化对$rootScope.foo的值所做的更改。是的,我们也考虑了这一点。不过,我们似乎要放弃作为单个应用程序实例的一部分可以访问的大量方便功能。你能列出你确定的最重要的功能吗?因为我也在考虑使用单个应用程序的想法。谢谢例如,除了拥有多个应用程序带来的任何开销外,我们失去了angularjs模板缓存(用于组件等),失去了装饰内置$http内容的中心位置(用于度量等),我们负责编写自己的通信层来连接应用程序等。