web-dev-qa-db-fra.com

Angular CLI - ng serve - utilisation élevée du processeur par le processus de nœud

Je suis aux prises avec un problème où, lors de l'exécution d'une application angular app localement, le processus de nœud lié à ng serve Utilise bien plus de 100% de mes cœurs de processeur.

Mon environnement actuel est:

CLI angulaire: 7.3.10 Nœud: 11.15.0 OS: darwin x64 (Mac OS X Catalina 10.15.4) Angulaire: 7.2.16

J'ai rencontré de nombreux articles et problèmes à ce sujet où les solutions courantes semblent être d'installer fsevents pour les problèmes de Mac OS.

Les choses que j'ai essayées:

  • Installation des outils de ligne de commande XCode pour node-gyp Pour reconstruire fsevents après son installation
  • Installez la dernière version de fsevents (2.1.3) car une version plus ancienne est spécifiée comme dépendance facultative avec angular-cli (1.2.13)
    • En utilisant une version de nœud différente, j'ai essayé 12.13.0 et supprimez node_modules et effectuez une nouvelle installation. Également essayé la dernière version de fevents à nouveau
    • En cas de son pertinent, j'utilise nvm aussi
    • J'ai essayé npm rebuild
    • Mise à niveau d'une de mes applications de Angular 7 à 9, toujours le même comportement après une installation propre des dépendances, en s'assurant que fsevents est installé et en essayant la dernière version aussi

Peu importe ce que j'essaie, je continue d'observer une utilisation élevée du processeur, je l'ai vu parfois grimper à 300-400%.

Cela entrave vraiment mon développement et j'espère que quelqu'un aura des idées brillantes que je pourrais essayer.

A défaut, je me demande si je devrais essayer de désinstaller complètement node, en me débarrassant de nvm et en partant de zéro.

MISE À JOUR - RÉSOL

J'ai donc choisi de supprimer nvm et node de ma machine et d'installer la dernière version stable du site Web nodeJS.

Cela n'a fait aucune différence lors du démarrage de mes applications.

Je suis tombé sur quelques articles parlant du comportement d'interrogation de Webpack et des options pour désactiver cette option ou pour augmenter l'intervalle d'interrogation.

J'ai trouvé qu'il y a un argument cli --poll [ms] Qui peut être utilisé pour contrôler cette fréquence lorsque ng serve Est en jeu.

En utilisant un argument --poll 1000, J'ai maintenant deux de mes applications en cours d'exécution, chacune utilisant environ 30% de mon processeur. Donc bien plus bas que ce que j'ai observé ces derniers temps, mais je voulais voir si je pouvais descendre plus bas.

En utilisant un argument --poll 2000, Je vois maintenant les processus de nœud pour ces applications en utilisant seulement environ 10-15%.

Lors de la détection des changements et de la recompilation des pics d'utilisation du processeur, auxquels je m'attendrais, puis redescend à ces niveaux inférieurs.

Donc, quelle qu'en soit la raison, fsevents n'a aucun effet sur ma machine, elle est toujours en cours d'installation lorsque npm i Mes dépendances d'application, et je l'ai installée globalement au cas où cela ferait une différence.

Quoi qu'il en soit, je suis plus heureux maintenant, même si j'aurais aimé comprendre pourquoi ce problème est survenu en premier lieu!

¯\_(ツ)_/¯

8
mindparse

Peut-être avez-vous une configuration similaire pour votre rechargement à chaud/en direct sur Docker comme ng serve --Host 0.0.0.0 --poll 1. La valeur poll est problématique, changez-la sur quelque chose de plus grand, par exemple 2000, tel que ng serve --Host 0.0.0.0 --poll 2000.

Maintenant, vous perdrez (presque) le rechargement à chaud/en direct en temps réel, mais vous économiserez votre CPU/batterie et aurez 2 secondes de retard avant que votre application actualise le code modifié.

0
Daniel Danielecki

il semble que j'ai réussi à résoudre le problème: supprimez le/node_module et réinstallez

dans mon cas, cela m'a aidé à trouver le conseil ici: https://gitmemory.com/issue/angular/angular-cli/14748/501608887

0
Peter Uzek

Essayez d'utiliser la commande ci-dessous

node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve
0
LogicBlower