2016-10-09 38 views
4

我有一個儀表板應用程序,幾個圖表在設定的時間間隔內得到更新。我的第一個想法是更新商店中的數據,然後讓所有圖表從這裏進行提供。Redux商店是否會導致內存泄漏?

但是會導致內存泄漏嗎?由於每次數據更改並保留舊數據庫時,Redux都會創建新的存儲庫。每秒會有大約2mb的數據堆積起來並導致應用程序崩潰嗎?

我看到的另一種方法是將數據保持在本地狀態(使用setState)。 我希望一些更有經驗的React/Redux開發人員可以爲此提供建議。謝謝!

回答

4

丹阿布拉莫夫,終極版的創造者解決這個問題here像這樣:

注意,有時人們弄不清楚終極版,並假設對每一個動作,狀態樹已深深克隆。這絕對不是這種情況。只有更改的部分需要更改其參考。例如,如果某個操作導致數組中的某個項發生更改,實際上該項和該數組需要被複制,但是,數組中的所有其他元素將保留其身份。由於大多數時間操作都是非常有針對性的,並且會影響一些狀態鍵,並且由於Redux鼓勵規範化數據以便數據結構沒有深度嵌套,所以對於典型的Web應用程序而言,這比典型的想象要少得多。

我認爲這是答案的肉。

+0

這只是揭穿了這個問題中的一些假設。當然,並非整個商店都被克隆。但與可能的內存泄漏有關的是,如果引用舊狀態存儲與否。其他答案似乎表明,這只是開發工具的情況。 – amoebe

3

Vanilla Redux不會那樣做,或者 Redux商店會泄漏。事實上,應用程序的其餘部分持有對狀態的引用將阻止它被清除。

例如像

window.states = [] 
store.subscribe(() => { 
    window.states.push(store.getState()) 
}) 

會引起無限的內存增長。另外,一些Redux開發工具會泄漏以提供時間旅行功能,因此請確保它們已關閉以進行生產構建。

3

首先,確實聽起來像一個可怕的很多數據。你的客戶端應用程序實際上是需要那麼多的數據呢?

二,Redux不「創建新店」。假設您按照推薦的方法更新數據,舊的數據引用將被丟棄並將被垃圾收集。默認情況下,Redux本身不會保留對舊狀態樹的引用,儘管Redux DevTools可以啓用時間行程調試。

您可能需要閱讀Redux文檔中的幾個部分。具體見http://redux.js.org/docs/faq/Performance.html,http://redux.js.org/docs/recipes/StructuringReducers.html

您可能還想瀏覽我的Redux addons catalog,其中包含可以執行批量更新等操作的插件。

相關問題