javascript asp.net angularjs angularjs-scope signalr.client

javascript - $ scope. $ apply ralentiza el rendimiento



asp.net angularjs (1)

Tengo una aplicación de una sola página usando AngularJS y estoy enfrentando un problema de rendimiento. Mi aplicación procesa los eventos entrantes desde el lado del servidor que se pasan al marco AngularJS en el lado del cliente utilizando ASP.NET SignalR. Hay millones de eventos que pueden ser recibidos por mi aplicación y no hay problemas de rendimiento en el lado del servidor y fácilmente pasa estos números de eventos uno detrás del otro al marco de AngularJS. El problema radica en el lado del cliente. Después de procesar el evento, uso $ scope. $ Apply () para actualizar la página y mostrar los eventos. En tal caso donde se reciben múltiples eventos uno detrás de otro, al llamar $ scope. $ Apply () cada vez ralentiza la aplicación y no muestra los eventos rápidamente. Los eventos se transmitirán al azar, por lo que ni siquiera sé cómo mi aplicación recibirá ningún evento en ningún momento.

Cualquier idea sobre cómo resolver este problema será muy útil.

Gracias.


En lugar de usar $scope.$evalAsync() , use $scope.$evalAsync() lugar.

De los documentos:

Ejecuta la expresión en el ámbito actual en un momento posterior.

$evalAsync no garantiza cuándo se ejecutará la expression , solo eso:

  • se ejecutará después de la función que programó la evaluación (preferiblemente antes del renderizado DOM).
  • al menos un ciclo $digest se realizará después de la ejecución de la expression .

Cualquier excepción a la ejecución de la expresión se reenvía al servicio $exceptionHandler .

Nota: si se llama a esta función fuera de un ciclo $digest , se programará un nuevo ciclo $digest . Sin embargo, se recomienda llamar siempre al código que cambia el modelo desde una llamada $apply . Eso incluye el código evaluado a través de $evalAsync .

También solía tener un método $scope.$safeApply() que efectivamente era una llamada sin rebote a $scope.$evalAsync() .