3

我有一个使用AngularJS的单页面应用程序,我面临着一个性能问题。我的应用程序处理来自服务器端的传入事件,这些事件使用ASP.NET SignalR传递给客户端上的AngularJS框架。有数百万个事件可以被我的应用程序接收,并且在服务器端没有性能问题,并且它很容易将这些事件一个接一个地传递给AngularJS框架。问题在于客户端。处理事件后,我使用$ scope。$ apply()更新页面并显示事件。在这种情况下,一个接一个地接收多个事件,每次调用$ scope。$ apply()会减慢应用程序速度,并且不会很快显示事件。这些事件将随机传递,所以我甚至不知道我的应用程序会在任何时间点收到任何事件。

关于如何解决此问题的任何想法都将非常有帮助。

谢谢。

回答

4

改为使用$scope.$evalAsync()代替使用$scope.$apply()

从文档:

执行在稍后的时间点上的当前范围的表达。

$evalAsync不保证至于何时expression将执行 ,只是:

  • 它将,定评价 (优选之前DOM渲染)函数之后执行。
  • 至少一个$digest周期将执行expression执行后执行 。

从 执行的表达的任何异常都转发到$exceptionHandler 服务。

注意:如果在$digest周期之外调用此函数,则会计划一个新的 $digest周期。不过,我们鼓励您始终致电 调用代码,以便在$apply调用中更改模型。 包括通过$evalAsync评估的代码。

我也倾向于有一个$scope.$safeApply()方法以及实际上是$scope.$evalAsync()去抖电话。

+1

有趣,从来不知道这甚至存在,谢谢! – CodingIntrigue

+0

谢谢。我会在这里尝试并更新 – Shish

相关问题