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