Heim  >  Artikel  >  Web-Frontend  >  Bei Verwendung von Angular4 tritt ein JavaScript-Speicherüberlaufproblem auf (ausführliches Tutorial)

Bei Verwendung von Angular4 tritt ein JavaScript-Speicherüberlaufproblem auf (ausführliches Tutorial)

亚连
亚连Original
2018-06-01 09:47:381439Durchsuche

In diesem Artikel wird hauptsächlich das Speicherüberlaufproblem von Angular4 JavaScript vorgestellt. Jetzt teile ich es mit Ihnen und gebe es als Referenz.

Als ich kürzlich ein auf Angular4 basierendes Projekt schrieb, trat beim Erstellen von --prod plötzlich ein Fehler auf. Der Fehler lautete wie folgt:

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

Hinweis: Der Code hier ist nicht mein tatsächlicher Fehlercode. Die Kompilierungszeit war zu lang und ich habe vergessen, ihn abzufangen. Wenn Sie auf das gleiche Problem stoßen. Lesen Sie weiter. Ich kann die Antwort finden!

Ich war damals verwirrt, als ich gut kompiliert hatte, also warum lief es plötzlich über?

Die möglichen Gründe sind wie folgt:

1 .angular4 benötigt während der Kompilierung relativ viel CPU und Speicher. Wenn eine große Anzahl von Dateien vorhanden ist, ist möglicherweise nicht genügend Speicher vorhanden große Menge an Big Data Schleife oder Endlosschleife (es gibt keinen Überlauf in der Sever-Stufe, diese Wahrscheinlichkeit sollte gering sein);

3 Die von Angular abonnierten Daten werden in der ngOnDestroy-Stufe nicht zerstört, was zu einem Große Datenmenge belegt den Speicher (möglich)

Derzeit haben wir die konkrete Ursache nicht herausgefunden. Bitte klären Sie uns auf!

Die Der Prozess zur Lösung dieses Problems ist sehr verwirrend, deshalb werde ich hier nicht näher darauf eingehen. Ich möchte es wahrscheinlich nicht wissen. Lassen Sie uns unten über die Lösung sprechen:

Die Kernidee ist die Verwendung Das alte Attribut der v8-Engine: --max_old_space_size, um den Speicher online zu ändern, ist ein nerviger kleiner Kobold!

Verzeichnis ändern: my-project/node_modules/.bin Finden 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" %*
)

Verzeichnis ändern: my-project/node_modules/. bin Finden Sie 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" %*
)

Haben Sie die Einstellung --max_old_space_size im Inneren gesehen? Was die Zahl betrifft, können Sie selbst entscheiden, dass mein Projekt relativ groß ist, also stellen Sie einen größeren Wert ein, um Unfälle zu vermeiden, haha!

Dann führen Sie ng build --prod aus. Glauben Sie, dass das ausreicht? Das ist der entscheidende Punkt!

Ich habe es persönlich getestet und festgestellt, dass nach der Einrichtung wie oben immer noch ein Speicherüberlauf gemeldet wird Beim erneuten Kompilieren scheint es keinen Nutzen zu haben! Wechseln Sie in das aktuelle Verzeichnis und führen Sie dann ng build --prod aus Funktioniert, also behalten Sie es bitte!

Das oben Gesagte habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

So ändern Sie den Wert eines bestimmten Elements in den von vue angeforderten Daten


Ausführliche Erklärung Durch die Verwendung von vue -cli scaffolding wird die Projektstruktur unter dem Vue-Projekt initialisiert


vue und vue-i18n werden kombiniert, um eine mehrsprachige Umschaltmethode für Hintergrunddaten zu implementieren



Das obige ist der detaillierte Inhalt vonBei Verwendung von Angular4 tritt ein JavaScript-Speicherüberlaufproblem auf (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn