Angular CLI - ng serve - 来自节点进程的高 CPU 使用率

min*_*rse 21 fsevents node.js node-gyp webpack angular

我正在努力解决一个问题,即在本地运行任何 angular 应用程序时,链接到的节点进程ng serve使用了超过 100% 的 CPU 内核。

我现在的环境是:

Angular CLI:7.3.10 节点:11.15.0 操作系统:darwin x64 (Mac OS X Catalina 10.15.4) Angular:7.2.16

我遇到了很多关于此的帖子和问题,其中常见的解决方案似乎是fsevents针对 Mac OS 问题进行安装。

我尝试过的事情:

  • 安装 XCode 命令行工具node-gypfsevents在安装后重建
  • 安装最新版本的fsevents(2.1.3),因为旧版本被指定为 angular-cli (1.2.13) 的可选依赖项
    • 使用不同的节点版本,尝试 12.13.0 并删除 node_modules 并进行全新安装。还再次尝试了最新的 fevents 版本
    • 柜面其相关我nvm也使用
    • 试过 npm rebuild
    • 将我的一个应用程序从 Angular 7 升级到 9,在全新安装依赖项后仍然保持相同的行为,确保安装了 fsevents 并尝试了最新版本

无论我尝试什么,我一直观察到 CPU 使用率很高,我看到它有时会上升 300-400%。

这真的阻碍了我的发展,我希望有人可能有一些我可以尝试的好主意。

如果失败,我想知道是否应该尝试node完全卸载,摆脱nvm并从头开始。

更新 - 已解决

所以我走下了删除nvmnode关闭我的机器并从 nodeJS 网站安装最新稳定版本的路线。

在启动我的应用程序时这样做没有区别。

我看到一些帖子谈论 webpack 的轮询行为以及关闭它或增加轮询间隔量的选项。

我发现有一个--poll [ms]cli 参数可用于ng serve在播放时控制此频率。

使用--poll 1000arg,我现在有两个应用程序在运行,每个应用程序使用大约 30% 的 CPU。比我最近观察到的要低得多,但我想看看我是否能把它降得更低。

使用--poll 2000arg,我现在看到这些应用程序的节点进程只使用了大约 10-15%。

当检测到变化并重新编译 CPU 使用率峰值时,我预计会出现这种情况,然后又回落到这些较低的水平。

因此,无论出于何种原因fsevents对我的机器没有影响,当npm i我的应用程序依赖项时它仍在安装,并且我已经全局安装它以防万一。

无论如何,我现在更开心了,尽管我希望我首先理解为什么会出现这个问题!

¯\_(?)_/¯

cer*_*ner 19

在 Angular 开发环境中;转译/编译会导致 CPU 尖峰。如果这种情况发生得太频繁,您的系统就会出现问题。

有一些方法可以稍微缓解疼痛;

  • 完全关闭文件更改检测/实时重新加载/自动编译

ng serve --live-reload falseng serve --no-live-reload等等,取决于您的 Angular CLI 版本

  • 有更好的变化检测,只在真正需要时做出反应

npm install fsevents

npm rebuild fsevents

npm serve

  • 忘记更改检测,根据时间间隔检查更改

ng serve --poll [ms]

CPU 管理很棘手,这个问题可能有很多原因。这些只是与 Angular 开发密切相关的几种可能性。我希望这个答案提供了一些选择来尝试那些遇到同样问题的人。


小智 0

看来我设法解决了问题:删除 /node_module 并再次安装

就我而言,这帮助我在这里找到了建议: https: //gitmemory.com/issue/angular/angular-cli/14748/501608887