3

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

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

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

我的印象是,Angular 区域正在为XMLHttpRequest上传期间发生的每个进度事件启动更改检测。

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

4

2 回答 2

6

最后,我设法使用runOutsideAngular.

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

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

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

ngZone.runOutsideAngular(() => $flow.upload());
于 2017-08-02T13:17:44.523 回答
0

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

于 2018-09-07T15:17:02.977 回答