Heim  >  Artikel  >  Web-Frontend  >  Wie man mit Speicherüberlauf in AngularJS umgeht

Wie man mit Speicherüberlauf in AngularJS umgeht

php中世界最好的语言
php中世界最好的语言Original
2018-03-27 17:44:002513Durchsuche

Dieses Mal zeige ich Ihnen, wie Sie mit einem Speicherüberlauf in AngularJS umgehen. Welche Vorsichtsmaßnahmen gibt es für den Umgang mit einem Speicherüberlauf in AngularJS? Das Folgende ist ein praktischer Fall Schauen Sie mal rein.

Dieses Mal zeige ich Ihnen, wie Sie mit dem Speicherüberlauf von AngularJS umgehen und welche Vorsichtsmaßnahmen für den Umgang mit dem Speicherüberlauf von AngularJS gelten. Das Folgende ist ein praktischer Fall, schauen wir uns das an.

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 echter Fehlercode. Die Kompilierungszeit war zu lang und ich habe vergessen, ihn abzufangen. Wenn Sie auf das gleiche Problem stoßen , weiter unten. Mal sehen, ob wir 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 folgt:

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

2. Wenn der Code eine große Menge an Big-Data-Schleifen oder Endlosschleifen enthält (es gibt keinen Überlauf in der Sever-Phase, sollte diese Wahrscheinlichkeit gering sein);

3 Die von Angular abonnierten Daten werden im ngOnDestroy nicht zerstört Bühne, die dazu führt, dass eine große Datenmenge den Speicher belegt (möglich)

Die konkrete Ursache konnte bisher nicht gefunden werden, bitte weiß das jemand, danke!

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

Die Kernidee besteht darin, das alte -Attribut der v8-Engine zu verwenden: --max_old_space_size, um den Speicher online zu ändern, es ist ein Kinderspiel.

Verzeichnis ändern: my-project/node_modules/.bin Finden Sie 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 von --max_old_space_size darin gesehen? Sie können selbst entscheiden, wie groß das Projekt ist. Stellen Sie also einen größeren Wert ein, um Unerwartetes zu verhindern, haha!

Führen Sie dann ng build --prod aus. Glauben Sie, dass dies ausreicht?

Ich habe es persönlich mit den oben genannten Einstellungen getestet, und wenn ich dann die Kompilierung ausführe, wird immer noch ein Speicherüberlauf gemeldet Scheint nutzlos zu sein! Wechseln Sie in das aktuelle Verzeichnis zu my-project/node_modules/.bin und führen Sie dann ng build --prod aus, und die Welt wird plötzlich in Frieden sein. Ich habe es persönlich getestet und es funktioniert, danke, dass Sie es beibehalten haben!

Wenn Sie fragen möchten, warum nicht --aot hinzufügen, überlassen Sie es einfach sich selbst und denken Sie zuerst darüber nach!

Okay, nehmen Sie sich etwas Zeit aus Ihrem vollen Terminkalender, um es zu teilen Wie man dieses große Loch füllt, ich hoffe, dass es für alle nützlich sein wird, nachdem Sie den Fall in diesem Artikel gelesen haben. Bitte beachten Sie die PHP-Chinesen Website

andere

verwandte Artikel!

Empfohlene Lektüre:

vue2.0 verwendet Swiper, um Karussellanzeigen zu implementieren

So implementieren Sie mobiles Scrollen in Vue

Das obige ist der detaillierte Inhalt vonWie man mit Speicherüberlauf in AngularJS umgeht. 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