2017-10-27 2 views
1

私は店舗が州のリストであることを知っているので、各州はその前または次の州に直接アクセスできます。膨大な量のデータがあり、各状態が大きすぎてすべての状態で保存できない場合、このリストはアプリケーションのメモリに保存されます。過度のメモリを避けるために、古いストアオブジェクトを永久に削除するにはどうすればよいですか?この時点でngrxの店舗の以前の状態を削除するには?

私のコードのようになります:「RESET_STORE」がルート減速戻っ「udefined」と呼ばれる、しかし、私が知っているように、店舗の古い状態を保存したが、まだあるされている場合

古いデータが含まれています。私はそれを永久に削除したい。メモリを解放する。

+0

ガベージコレクションは、Web世界のブラウザで処理されます。 Webアプリケーション開発者としてのあなたの仕事は、古いデータへの参照を保持してブラウザが収集できないように、ブラウザがガベージコレクションを妨げないようにすることです。このケースでは、あなたはいくつかの場所であなたのためにそれを行うためのフレームワークに傾いており、彼らはそれが正しいことを望む必要がありますか、コードを通過し、彼らが台無しに思うなら何が起こっているのか把握する必要があります。 ngrxはかなり良いです、彼らは実際にすべての以前の状態を保持していない、これは何をしているのかを誤って表しています。 – bryan60

+0

ブライアンに感謝します。あなたの説明は、私が古い状態がどのように保存されているかを理解する助けになりました –

答えて

0

あなたのngrxの理解は少しです。 ngrxは実際にはすべての以前の状態を保持しません。 ngrxの背後にあるアイデアは、同じ行動セットとペイロードの同じセットが常に同じアプリケーション状態を生成する必要があるということです。この意味で、アクションとペイロードの記録は、各時点でのアプリ状態の完全な履歴です。

あなたが説明していることをする必要はありません。メモリに問題がある場合、おそらくどこかでリークを作成している可能性があります。

+0

ありがとうございました。これは私を助けました。 –

0
const initialState = appReducer({}, {}) 

const rootReducer = (state, action) => { 
if (action.type === 'RESET_STORE') { 
    state = initialState 
} 
return appReducer(state, action) 
} 
+0

すぐにお返事ありがとうございます。しかし、私はこれが現在の状態だけをリセットすることを知っているので、古いデータはまだメモリに保存されます。私は、現在の状態をリセットするだけでなく、不要なデータを削除したい。 –

0

これはまったく必要ありません。これはブラウザのガベージコレクタによって行われます。

以前の状態をどこかに保持しないようにしてください。

たとえば、以前の状態をすべて配列にプッシュするミドルウェアを作成した場合、それらは決して消去されず、時間の経過とともにメモリ消費量が減少することなく増加します。

+0

ありがとうございました! –

関連する問題