【问题标题】:Slow performance in hybrid AngularJS and Angular application in SafariSafari 中混合 AngularJS 和 Angular 应用程序的性能缓慢
【发布时间】:2018-01-08 21:08:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: angularjs angular safari zonejs ng-flow


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-06-10
        • 1970-01-01
        • 2020-01-30
        • 2019-03-13
        • 2021-04-23
        • 2019-12-27
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多