ホームページ  >  記事  >  ウェブフロントエンド  >  angular4 を使用すると JavaScript のメモリ オーバーフローの問題が発生する (詳細なチュートリアル)

angular4 を使用すると JavaScript のメモリ オーバーフローの問題が発生する (詳細なチュートリアル)

亚连
亚连オリジナル
2018-06-01 09:47:381402ブラウズ

この記事では主に angular4 JavaScript のメモリ オーバーフローの問題を紹介し、参考にさせていただきます。

最近、angular4 に基づいてプロジェクトを書いていたとき、--prod をビルドするときに、突然次のようなエラーが発生しました。 1 つ目は、エラー コード、コンパイル時間が長すぎる、インターセプトするのを忘れた、一般的なエラーは基本的に同じです、同じ問題が発生した場合は、おめでとうございます。以下を読むことで答えが見つかります

その時点ではコンパイルは常に良好でしたが、なぜ突然オーバーフローが発生したのでしょうか? 考えられる理由は次のとおりです:

1.angular4 はコンパイル中に比較的大量の CPU とメモリを必要とします。ファイルの数が多い場合、メモリが不足している可能性があります (可能性があります);

2. コードに大量のビッグデータ ループまたは無限ループがある場合 (サーバー ステージでオーバーフローが発生しない)、この可能性は低くなります。 );

3. ngOnDestroy 段階で angular によってサブスクライブされたデータが破棄されず、大量のデータがメモリを占有します (おそらく)

原因はまだわかっていません。遠慮なく教えてください。ありがとうございます!

この問題を解決するプロセスは非常に紆余曲折があるので、ここでは触れません。おそらく知りたくないでしょう。それでは、以下の解決策について話しましょう。

中心となるアイデアは、v8 エンジンの古い属性 --max_old_space_size を使用してメモリをオンラインで変更することです。

ディレクトリを変更するのは面倒です。 /.bin ng.cmd の検索:

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

ディレクトリの変更: my-project/node_modules/.bin 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" %*
)

内部を見る --max_old_space_size は設定されていますか?どのくらいの数値を設定するかは、自分で決めることができます。私のプロジェクトは比較的大きいので、事故を防ぐために大きな値を設定しました (笑)

それから ng build --prod を実行します。これで十分だと思いますか?これが重要なポイントです

上記の設定で再度コンパイルを実行すると、やはりメモリ オーバーフローが報告されますが、役に立たないようです。 node_modules/.bin 次に、ng build --prod を実行すると、世界が突然平和になります! 私が個人的にテストして動作したので、保存してください

以上が皆さんのお役に立てば幸いです。未来のみんなへ。

関連記事:

vueからリクエストされたデータ内の特定の項目の値を変更する方法

vue-cliスキャフォールディングを使用してVueプロジェクトの下でプロジェクト構造を初期化する詳細な説明

vue と vue-i18n を多言語切り替え方法と組み合わせてバックグラウンド データを実現します


以上がangular4 を使用すると JavaScript のメモリ オーバーフローの問題が発生する (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。