Maison >interface Web >js tutoriel >Comment résoudre le problème de débordement de mémoire JS dans angulaire4
Cette fois, je vais vous montrer comment résoudre le problème de débordement de mémoire JS dans angulaire4. Quelles sont les précautions pour résoudre le problème de débordement de mémoire JS dans angulaire4. Ce qui suit est un cas pratique, jetons un coup d'oeil.
Récemment, alors que j'écrivais un projet basé sur angulaire4, lors de la construction de --prod, une erreur est soudainement apparue de manière inattendue. L'erreur est à peu près la suivante :
70% building modules 1345/1345 modules 0 active <--- Last few GCs ---> ms: Mark-sweep 703.9 (837.9) -> 701.4 (811.9) MB, 331.3 / 0 ms [allocation failure] [GC in old space requested]. ms: Mark-sweep 701.4 (811.9) -> 701.4 (790.9) MB, 350.5 / 0 ms [allocation failure] [GC in old space requested]. ms: Mark-sweep 701.4 (790.9) -> 698.0 (760.9) MB, 433.7 / 0 ms [last resort gc]. ms: Mark-sweep 698.0 (760.9) -> 692.7 (751.9) MB, 328.7 / 0 ms [last resort gc]. <--- JS stacktrace ---> ==== JS stack trace ========================================= Security context: 00000298510373A9 <JS Object> 1: /* anonymous */(aka /* anonymous */) [D:\dev\cobalt_wp\node_modules\webpack\lib\FlagDependencyExportsPlugin.js:77] [pc=0000026F721B51D6] (this=0000029851004131 <undefined>,dep=00000150FC6162C9 <a NormalModule with map 0000025741730C01>) 2: arguments adaptor frame: 3->1 3: InnerArrayForEach(aka InnerArrayForEach) [native array.js:~924] [pc=0000026F71EE3DCD] (this=000002985100413... FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
. Remarque : le code ici n'est pas mon code d'erreur réel. Le temps de compilation a été trop long et j'ai oublié de l'intercepter. L'erreur générale est fondamentalement la même. Si vous rencontrez le même problème, félicitations, vous pouvez trouver la réponse en lisant ci-dessous. !
J'étais confus à ce moment-là, la compilation se passait toujours bien, pourquoi a-t-elle soudainement débordé ?
Les raisons possibles sont les suivantes :
1. Lors de la compilation, angulaire4 a des exigences relativement importantes en termes de CPU et de mémoire. Lorsqu'il y a un grand nombre de fichiers, la mémoire peut être insuffisante (éventuellement) ; 2. Lorsque le code comporte des
bouclesou des boucles infinies avec beaucoup de big data (il n'y a pas de débordement dans l'étape de séparation, cette probabilité doit être faible ) ; 3. Les données souscrites par angulaire ne sont pas détruites à l'étape ngOnDestroy, ce qui entraîne une grande quantité de données à occuper la mémoire (possible)
La cause précise n'a pas été trouvée jusqu'à présent. Est-ce que quelqu'un est au courant ? N'hésitez pas à m'éclairer
. Le processus de résolution de ce problème est très compliqué, je n’entrerai donc pas dans les détails ici. Vous ne voulez probablement pas en savoir plus. Parlons de la solution ci-dessous :
. L'idée de base est d'utiliser l'ancien attribut
du moteur v8: --max_old_space_size pour modifier la mémoire en ligne. Quant à savoir où définir cet attribut, c'est un petit gobelin ennuyeux . Modifier le répertoire : mon-projet/node_modules/.bin Rechercher ng.cmd :
Modifier le répertoire : mon-projet/node_modules/.bin Rechercher ngc.cmd :@IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node --max_old_space_size=8192 "%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng" %* )Avez-vous vu le paramètre --max_old_space_size ? Quant à la valeur à définir, vous pouvez le décider vous-même. Mon projet est relativement volumineux, j'ai donc défini une valeur plus grande pour éviter les accidents, haha ! Ensuite, exécutez ng build --prod Pensez-vous que c'est suffisant ? C'est le point clé ! Je l'ai personnellement testé et j'ai découvert qu'après la configuration comme ci-dessus, le débordement de mémoire sera toujours signalé lors de la nouvelle compilation, ce qui semble inutile. Basculez le répertoire actuel vers my-project/node_modules/.bin, puis exécutez ng build ! --prod, et le monde sera soudainement en paix ! Je l'ai personnellement testé et ça marche, alors s'il vous plaît, gardez-le
@IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\._@angular_compiler-cli@4.0.1@@angular\compiler-cli\src\main.js" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node --max_old_space_size=8192 "%~dp0\..\._@angular_compiler-cli@4.0.1@@angular\compiler-cli\src\main.js" %* )
Je crois que vous maîtrisez la méthode après avoir lu le cas dans cet article. informations passionnantes, veuillez prêter attention aux autres articles connexes sur le site Web php chinois !
Lecture recommandée :
Explication détaillée des étapes permettant à Vue d'utiliser la bibliothèque de fonctions xe-utilsActualisations de Vue après avoir emballé le projet Comment gérer l'affichage 404
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!