Safari中混合AngularJS和Angular应用程序的性能降低

时间:2017-08-01 20:41:10

标签: angularjs angular safari zonejs ng-flow

我最近开始使用升级模块将AngularJS应用程序迁移到Angular 4。

我的一个AngularJS指令使用第三方库(ngFlow)使用XMLHttpRequest.send()上传文件。在混合模式下运行时,上传功能可以在Chrome和Firefox中正常运行。但是,在Safari中,应用程序在上载过程中变得非常慢,并且浏览器进程达到了100%的CPU使用率。

使用Safari网络工具,我发现很多来自zone.js的globalZoneAwareCallback来电。

我的印象是Angular区域正在启动上传过程中发生的每个XMLHttpRequest进度事件的变更检测。

我知道我可以使用runOutsideAngular中的NgZone来避免这种情况,但我不知道在第三方AngularJS库中发生异步调用的情况下如何使用它或者如果有任何其他解决方案来解决这个问题。

2 个答案:

答案 0 :(得分:4)

最后,我设法使用runOutsideAngular解决了这个问题。

首先,我降级了NgZone模块,以便在我的AngularJS代码中使用它:

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

然后我在upload指令中注入了该服务,并使用它来运行Angular区域中的文件上传:

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

答案 1 :(得分:0)

为避免$digest和性能方面的所有问题,我建议使用downgradeModule-它将AngularJS引导到Angular区域之外,并将两个变更检测系统分开。