2017-11-01 12 views
3

を使用するアプリケーションはAngular 4と大きく、事前ロード方法はpreloadAllModulesです。我々はAngular CLIを使用しています。角度4 - メモリ内のモジュールの複数のインスタンス

Chromeのインスペクタでメモリの問題を見て、どこにでも複数のモジュールインスタンスがあることに気付きました。

enter image description here

私はこの権利を読んでいた場合、我々はTranslateModuleHttpModuleなどの83個のインスタンスを持っている...私は考えることができる

だけの事は、すべてのlazy loadedモジュールをする必要が独自のルートを持っているということですそのバンドル用に独自のモジュールを作成しますか?

これらのインスタンスをすべて削除することは可能ですか、それが動作する方法ですか?

答えて

2

は、これらすべてのインスタンスを取り除くことが可能ですか、そのどれだけあるアプリモジュールによってインポートされたコアモジュールにこれらの共有モジュールのすべてを置く必要があります それは動作しますか?

はい、ルートAppModuleにインポートしてください。しかし、ロードされたすべてのモジュールにHttModuleを入れずに、ルートAppModuleに一度しかインポートすることはできませんが、RouterModule.forChild(routes)のように使用するRouterModuleの重複は避けられません。

すべての遅延ロードされたモジュールには、インポートされたすべてのモジュールのインスタンスがある独自のインジェクタがあるため、重複が発生します。したがって、遅延ロードされたモジュールが83個あり、各モジュールがHttpModuleRouterModuleをインポートすると、インポートされた各モジュールのインスタンスは83個になります。

ここで読むの詳細は:

2

あなたは今まで一度ロードされ、唯一の

+1

'RouterModule'は、各遅延ロードされたモジュールにインポートする必要があり、あなたは、routermoduleが異なる場合である –

+0

という各モジュールを回避することはできませんがそれが自分のものである必要があります。私は、モジュールが独自のものを必要としないケースを意味し、共有インスタンスを使用することができます。 – bryan60

+0

はい、彼は83のインスタンスを持つことを避けることはできません。それは設計上です。 –

関連する問題