2017-08-01 69 views
1

我最近開始使用升級模塊將AngularJS應用程序遷移到Angular 4。Safari中混合AngularJS和Angular應用程序的性能下降

我的一個AngularJS指令使用第三方庫(ngFlow)使用XMLHttpRequest.send()上傳文件。在混合模式下運行時,上傳在Chrome和Firefox中均可正常工作。但是,在Safari上,應用程序在上傳過程中變得非常緩慢,瀏覽器進程達到100%的CPU使用率。

使用Safari網絡工具,我發現有很多來自zone.js的globalZoneAwareCallback調用。

我的印象是,上傳期間發生的每個XMLHttpRequest進度事件都會發生角度區域的變化檢測。

我知道我可以使用從NgZone來避免這種情況,但我不知道如何在異步調用發生在第三方AngularJS庫中的情況下使用它,或者如果有任何其他解決方案解決這個問題。

回答

4

最後我設法使用runOutsideAngular來解決問題。

首先,我降級NgZone模塊在我的AngularJS代碼使用它:

factory('ngZone', downgradeInjectable(NgZone)); 

然後我注入上傳指令的服務,並用它來運行該文件上傳出角區:

ngZone.runOutsideAngular(() => $flow.upload());