我有一個儀表板應用程序,幾個圖表在設定的時間間隔內得到更新。我的第一個想法是更新商店中的數據,然後讓所有圖表從這裏進行提供。Redux商店是否會導致內存泄漏?
但是會導致內存泄漏嗎?由於每次數據更改並保留舊數據庫時,Redux都會創建新的存儲庫。每秒會有大約2mb的數據堆積起來並導致應用程序崩潰嗎?
我看到的另一種方法是將數據保持在本地狀態(使用setState)。 我希望一些更有經驗的React/Redux開發人員可以爲此提供建議。謝謝!
我有一個儀表板應用程序,幾個圖表在設定的時間間隔內得到更新。我的第一個想法是更新商店中的數據,然後讓所有圖表從這裏進行提供。Redux商店是否會導致內存泄漏?
但是會導致內存泄漏嗎?由於每次數據更改並保留舊數據庫時,Redux都會創建新的存儲庫。每秒會有大約2mb的數據堆積起來並導致應用程序崩潰嗎?
我看到的另一種方法是將數據保持在本地狀態(使用setState)。 我希望一些更有經驗的React/Redux開發人員可以爲此提供建議。謝謝!
丹阿布拉莫夫,終極版的創造者解決這個問題here像這樣:
注意,有時人們弄不清楚終極版,並假設對每一個動作,狀態樹已深深克隆。這絕對不是這種情況。只有更改的部分需要更改其參考。例如,如果某個操作導致數組中的某個項發生更改,實際上該項和該數組需要被複制,但是,數組中的所有其他元素將保留其身份。由於大多數時間操作都是非常有針對性的,並且會影響一些狀態鍵,並且由於Redux鼓勵規範化數據以便數據結構沒有深度嵌套,所以對於典型的Web應用程序而言,這比典型的想象要少得多。
我認爲這是答案的肉。
建議不要在用戶的瀏覽器上堆積2MB數據/秒。 Redux商店是瀏覽器上的客戶端。據我所知,關於內存泄漏的問題的其他部分不會發生。一些有用的鏈接:「既然終極版創建一個新的商店每次數據費用,並保持舊的」
Vanilla Redux不會那樣做,或者每 Redux商店會泄漏。事實上,應用程序的其餘部分持有對狀態的引用將阻止它被清除。
例如像
window.states = []
store.subscribe(() => {
window.states.push(store.getState())
})
會引起無限的內存增長。另外,一些Redux開發工具會泄漏以提供時間旅行功能,因此請確保它們已關閉以進行生產構建。
首先,確實聽起來像一個可怕的很多數據。你的客戶端應用程序實際上是需要那麼多的數據呢?
二,Redux不「創建新店」。假設您按照推薦的方法更新數據,舊的數據引用將被丟棄並將被垃圾收集。默認情況下,Redux本身不會保留對舊狀態樹的引用,儘管Redux DevTools可以啓用時間行程調試。
您可能需要閱讀Redux文檔中的幾個部分。具體見http://redux.js.org/docs/faq/Performance.html,http://redux.js.org/docs/recipes/StructuringReducers.html。
您可能還想瀏覽我的Redux addons catalog,其中包含可以執行批量更新等操作的插件。
這只是揭穿了這個問題中的一些假設。當然,並非整個商店都被克隆。但與可能的內存泄漏有關的是,如果引用舊狀態存儲與否。其他答案似乎表明,這只是開發工具的情況。 – amoebe