2017-08-01 68 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());