第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

數(shù)組移位時(shí)的Javascript內(nèi)存優(yōu)化

數(shù)組移位時(shí)的Javascript內(nèi)存優(yōu)化

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

2 回答

?
開滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

垃圾收集是在 JavaScript 中自動(dòng)完成的,您不必自己管理。這也是為什么您在從數(shù)組中移動(dòng)項(xiàng)目時(shí)看到內(nèi)存增加的原因,盡管您將大小限制為 50。

您不能強(qiáng)制或阻止垃圾收集,但是當(dāng)它運(yùn)行時(shí),它會(huì)在不引用它的情況下刪除值。


查看完整回答
反對(duì) 回復(fù) 2022-07-15
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

一個(gè)對(duì)象被稱為“垃圾”,如果有零個(gè)指向它的引用,則稱為可收集的。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management


與該方法相關(guān)聯(lián),您可以嘗試刪除變量引用。例子:


var a = 1;

var array = [a, 2, 3, 4];

a = null;

array.shift();


// or


var array = [1, 2, 3, 4];

array[0] = null;

array.shift();


查看完整回答
反對(duì) 回復(fù) 2022-07-15
  • 2 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)