Shi*_*ish 5 javascript asp.net angularjs signalr.client angularjs-scope
我有一个使用 AngularJS 的单页面应用程序,并且我面临一个性能问题。我的应用程序处理来自服务器端的传入事件,这些事件使用 ASP.NET SignalR 传递到客户端的 AngularJS 框架。我的应用程序可以接收数百万个事件,并且服务器端不存在性能问题,并且它可以轻松地将这些数量的事件一个接一个地传递到 AngularJS 框架。问题出在客户端。处理事件后,我使用 $scope.$apply() 更新页面并显示事件。在这种情况下,一个接一个地接收到多个事件,每次调用 $scope.$apply() 都会减慢应用程序的速度,并且不会快速显示事件。这些事件将随机传递,因此我什至不知道我的应用程序在任何时间点将如何接收任何事件。
关于如何解决此问题的任何想法都会非常有帮助。
谢谢。
不要使用$scope.$apply(),$scope.$evalAsync()而是使用 。
来自文档:
稍后在当前作用域上执行表达式。
不
$evalAsync保证何时expression执行,仅保证:
- 它将在计划评估的函数之后执行(最好是在 DOM 渲染之前)。
- 执行后至少
$digest会执行一个周期expression。表达式执行中的任何异常都会转发到服务
$exceptionHandler。注意:如果在循环之外调用此函数
$digest,$digest则会安排新的循环。但是,建议始终在调用中调用更改模型的代码$apply。这包括通过$evalAsync.
我还倾向于使用一种$scope.$safeApply()方法,该方法实际上是对$scope.$evalAsync().