Maison > interface Web > js tutoriel > le corps du texte

Un problème de débordement de mémoire JavaScript se produit lors de l'utilisation d'angular4 (tutoriel détaillé)

亚连
Libérer: 2018-06-01 09:47:38
original
1449 Les gens l'ont consulté

Cet article présente principalement le problème de débordement de mémoire de JavaScript angulaire4. Maintenant, je le partage avec vous et le donne comme référence.

Lorsque j'écrivais récemment un projet basé sur angulaire4, lors de la construction de --prod, une erreur est soudainement apparue de manière inattendue. L'erreur est 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
Copier après la connexion

Remarque : Le code ici n'est pas mon vrai code d'erreur. Le temps de compilation était trop long et j'ai oublié de l'intercepter. L'erreur générale est fondamentalement la même. félicitations, allez sur Vous pouvez trouver la réponse en lisant ci-dessous !

J'étais confus à l'époque. La compilation était toujours bonne, pourquoi a-t-elle soudainement débordé ?

Les raisons possibles sont les suivantes. :

1.angular4 a une demande relativement importante de CPU et de mémoire lors de la compilation. Lorsqu'il y a un grand nombre de fichiers, la mémoire peut être insuffisante (éventuellement) ; le code a un grand nombre de grandes boucles ou boucles infinies de données (il n'y a pas de débordement dans l'étape sever, cette probabilité doit être faible

3 Les données souscrites par angulaire ne sont pas détruites dans l'étape ngOnDestroy) ; , ce qui entraîne une grande quantité de données occupant la mémoire (possible)

Actuellement, nous n'avons pas trouvé la cause spécifique. Quelqu'un est-il au courant ? N'hésitez pas à m'éclairer, merci !

Le processus de résolution de ce problème est très complexe, donc je n'entrerai pas dans les détails ici, je suppose que je ne veux pas savoir, alors parlons de la solution ci-dessous :

Le. L'idée principale 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 :

@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" %*
)
Copier après la connexion
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_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" %*
)
Copier après la connexion
Avez-vous vu le paramètre --max_old_space_size à l'intérieur Quant au nombre, vous pouvez le constater par vous-même Allons-y, mon projet est relativement volumineux, définissez un une valeur plus grande pour éviter les accidents, haha !

Alors exécutez ng build --prod, pensez-vous que cela suffira ? C'est le point clé !

Je l'ai personnellement testé avec ce qui précède ? paramètres, un débordement de mémoire sera toujours signalé lors de la nouvelle compilation. Cela semble inutile ! Basculez le répertoire actuel vers my-project/node_modules/.bin puis exécutez ng build --prod , le monde devient soudainement paisible ! je l'ai testé et cela fonctionne, alors s'il vous plaît, gardez-le !

Ce qui précède est ce que j'ai compilé pour tout le monde. J'espère que cela sera utile à tout le monde à l'avenir.

Articles associés :

Comment modifier la valeur d'un certain élément dans les données demandées par vue


Explication détaillée d'utiliser l'échafaudage vue -cli initialise la structure du projet sous le projet Vue


vue et vue-i18n sont combinés pour implémenter une méthode de commutation multilingue pour les données d'arrière-plan



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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal