Heim > Web-Frontend > js-Tutorial > So lösen Sie das JS-Speicherüberlaufproblem in Angular4

So lösen Sie das JS-Speicherüberlaufproblem in Angular4

php中世界最好的语言
Freigeben: 2018-04-11 17:07:52
Original
2076 Leute haben es durchsucht

Dieses Mal zeige ich Ihnen, wie Sie das JS-Speicherüberlaufproblem in Angular4 lösen können. Was sind die Vorsichtsmaßnahmen , um das JS-Speicherüberlaufproblem in Angular4 zu lösen? Werfen wir einen Blick darauf.

Als ich kürzlich ein auf Angular4 basierendes Projekt schrieb, ist beim Erstellen von --prod plötzlich ein Fehler aufgetreten. Der Fehler lautet ungefähr 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
Nach dem Login kopieren

Hinweis: Der Code hier ist nicht mein tatsächlicher Fehlercode und ich habe vergessen, ihn abzufangen. Wenn Sie auf das gleiche Problem stoßen, können Sie die Antwort unten finden !

Ich war damals verwirrt. Die Zusammenstellung lief immer gut. Warum lief es plötzlich über?

Mögliche Gründe sind wie folgt:

1. Beim Kompilieren stellt Angular4 relativ hohe Anforderungen an CPU und Speicher. Bei einer großen Anzahl von Dateien ist möglicherweise nicht genügend Speicher vorhanden 2. Wenn der Code

Schleifen

oder Endlosschleifen mit vielen Big Data enthält (es gibt keinen Überlauf in der Sever-Phase, sollte diese Wahrscheinlichkeit gering sein ). 3. Die von Angular abonnierten Daten werden in der ngOnDestroy-Phase nicht zerstört, was dazu führt, dass eine große Datenmenge Speicher belegt (möglich)

Die konkrete Ursache konnte bisher nicht gefunden werden. Kann mich gerne aufklären

Der Prozess zur Lösung dieses Problems ist sehr kompliziert, daher werde ich hier nicht näher darauf eingehen. Lassen Sie uns unten über die Lösung sprechen:

Die Kernidee besteht darin, das alte

-Attribut der v8-Engine

zu verwenden: --max_old_space_size, um den Speicher online zu ändern, ist ein nerviger kleiner Kobold! Verzeichnis ändern: my-project/node_modules/.bin Finden Sie ng.cmd:

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_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" %*
)
Nach dem Login kopieren
Haben Sie die Einstellung --max_old_space_size darin gesehen? Wie viel Sie einstellen möchten, können Sie selbst entscheiden. Mein Projekt ist relativ groß, daher habe ich einen größeren Wert eingestellt, um Unfälle zu vermeiden, haha! Dann führen Sie ng build --prod aus. Denken Sie, dass das der entscheidende Punkt ist? Ich habe es persönlich getestet und festgestellt, dass nach der Einrichtung wie oben beim erneuten Kompilieren immer noch ein Speicherüberlauf gemeldet wird, was anscheinend keinen Nutzen bringt. Wechseln Sie das aktuelle Verzeichnis zu my-project/node_modules/.bin und führen Sie dann ng build aus! --prod, und die Welt wird plötzlich in Frieden sein! Ich habe es persönlich getestet, also behalten Sie es bitte bei Spannende Informationen, bitte beachten Sie andere verwandte Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:
@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" %*
)
Nach dem Login kopieren

Detaillierte Erläuterung der Schritte für Vue zur Verwendung der xe-utils-Funktionsbibliothek

Vue wird aktualisiert nach dem Verpacken des Projekts Wie man mit der 404-Anzeige umgeht

Das obige ist der detaillierte Inhalt vonSo lösen Sie das JS-Speicherüberlaufproblem in Angular4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage