我的項目中有更改歷史。History 是一個由對象組成的數(shù)組,其中每個對象有 2 個數(shù)組。所以當(dāng)我添加歷史快照時,它看起來像這樣(但實際上我沒有添加空數(shù)組):history.push({ //new history moment firstP: [], secondP: [], })例如數(shù)組 firstP 由如下對象組成:{ color: "red", move: 1, ... and some other fields (max 14 fields if it matters)}firstP 和 secondP 通常擁有數(shù)千個對象。所以每個歷史快照對于內(nèi)存來說都是相當(dāng)沉重的。所以我添加了限制const limitOfSteps = 50;現(xiàn)在每次推送后,我都會檢查歷史長度是否不大于 50。如果是,我會執(zhí)行 history.shift();但是我在記憶中看到的是,即使在移動(刪除數(shù)組中的第一個元素)時,使用的內(nèi)存也在增加。當(dāng)用戶在 react 應(yīng)用程序中執(zhí)行某些操作時,該元素會添加到歷史記錄中,因此他可以根據(jù)需要進行盡可能多的更改。我知道有垃圾收集器,但它如何與數(shù)組一起工作?移動數(shù)組應(yīng)該意味著元素已經(jīng)消失(并且也從內(nèi)存中消失了?)但它并沒有立即消失(如果用戶將快速進行更改,那么整個應(yīng)用程序?qū)?nèi)存不足)。將刪除的元素(就在移動數(shù)組之前)更改為 undefined 或 null 會使內(nèi)存更快地釋放嗎?主要目標(biāo)是使用更少的內(nèi)存......有人知道怎么做嗎?編輯:數(shù)組可能會移動一千次。Edit2(也許我的問題全錯了?也許我應(yīng)該問一下整個數(shù)組何時被刪除?)這一切都在狀態(tài)下的反應(yīng)應(yīng)用程序中。切片歷史(進行復(fù)制)可能會消耗更多內(nèi)存,但這是不可避免的,因為狀態(tài)是不可變的。我的更新方法如下所示:updateHistory = (newElement) => { const history = this.state.history.slice(); history.push(newElement); if(history.length - 1 > 50) history.shift(); this.setState({history: history});}這有什么意義嗎?
數(shù)組移位時的Javascript內(nèi)存優(yōu)化
猛跑小豬
2022-07-15 09:39:25