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

问题描述 投票:3回答:2

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

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

使用Safari网络工具,我看到很多来自zone.js的globalZoneAwareCallback调用。

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

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

angularjs angular safari zonejs ng-flow
2个回答
4
投票

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

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

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

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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.