Safari 中的混合 AngularJS 和 Angular 应用程序性能缓慢



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

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

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

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

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

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

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

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

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

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

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

相关内容

最新更新