如何在 Angular NgZone 之外运行我的代码

问题描述

我有一个非常需要 I/O函数,并且似乎触发了数百万次检测更改,尽管在函数运行时 DOM 中没有任何内容更新。有人建议使用 NgZone.runOutsideAngular 甚至 ngzone: 'noop'

在这两种情况下,与在 Node 中纯运行相比,我的函数仍然需要 30 倍的时间。

    console.log('Start');
    this.ngzone.runOutsideAngular(() => {
      repo.copyCache()
        .finally(() => {
          console.log('Done');
        });
    });

有谁知道,为什么尽管 runOutsideAngular 我的调用堆栈包含 ZoneAwarePromise 并重新路由我所有的 copyFile 调用

enter image description here

TLDR

为什么 ZoneAwarePromisezone-evergreen.js 出现在我的调用堆栈中,尽管我在 this.ngzone.runOutsideAngular 中创建和执行它们?

解决方法

我会考虑实现一个“Web Worker”,它会将您的函数放在后台线程上。

Angular Web Workers 文档位于 https://angular.io/guide/web-worker