问题描述
我有一个非常需要 I/O 的函数,并且似乎触发了数百万次检测更改,尽管在函数运行时 DOM 中没有任何内容更新。有人建议使用 NgZone.runOutsideAngular 甚至 ngzone: 'noop'
。
在这两种情况下,与在 Node 中纯运行相比,我的函数仍然需要 30 倍的时间。
console.log('Start');
this.ngzone.runOutsideAngular(() => {
repo.copyCache()
.finally(() => {
console.log('Done');
});
});
有谁知道,为什么尽管 runOutsideAngular
我的调用堆栈包含 ZoneAwarePromise
并重新路由我所有的 copyFile
调用?
TLDR
为什么 ZoneAwarePromise
和 zone-evergreen.js
出现在我的调用堆栈中,尽管我在 this.ngzone.runOutsideAngular
中创建和执行它们?
解决方法
我会考虑实现一个“Web Worker”,它会将您的函数放在后台线程上。
Angular Web Workers 文档位于 https://angular.io/guide/web-worker