首頁 web前端 js教程 利用ES6透過WeakMap解決記憶體洩漏問題(詳細教學)

利用ES6透過WeakMap解決記憶體洩漏問題(詳細教學)

May 31, 2018 pm 03:30 PM
記憶體 解決

本篇文章主要介紹了詳解ES6透過WeakMap解決記憶體洩漏問題,現在分享給大家,也為大家做個參考。

一、Map

1.定義

Map物件儲存鍵值對,類似於資料結構字典;與傳統上的物件只能用字串當鍵不同,Map物件可以使用任意值當鍵。

2.語法

new Map([iterable])
登入後複製

屬性

size:傳回鍵值對的數量。

操作方法

  1. set(key, 值):設定(新增/更新)鍵key的值為value,傳回Map物件。

  2. get(key):讀取鍵key的值,沒有則回傳undefined。

  3. has(key):判斷一個Map物件中是否存在某個鍵值對,回傳true/false。

  4. delete(key):刪除某個鍵值對,回傳true/false。

  5. clear():清除Map物件中所有鍵值對。

遍歷方法

  1. keys():傳回鍵名的Iterator物件。

  2. values():傳回鍵值的Iterator物件。

  3. entries():傳回鍵值對的Iterator物件。

  4. forEach((value, key, map) => {}):遍歷Map物件所有鍵值對。

3.範例

操作方法

let m = new Map([
  ['foo', 11],
  ['bar', 22]
]);
m.set('mazey', 322)
  .set('mazey', 413);
console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}
console.log(m.has('mazey')); // true
m.delete('mazey');
console.log(m.has('mazey')); // false
m.clear();
console.log(m); // {}
登入後複製

遍歷方法

let m = new Map([
  ['foo', 11],
  ['bar', 22],
  ['mazey', 413]
]);
console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}
console.log(m.keys()); // MapIterator {"foo", "bar", "mazey"}
console.log(m.values()); // MapIterator {11, 22, 413}
console.log(m.entries()); // MapIterator {"foo" => 11, "bar" => 22, "mazey" => 413}
m.forEach((value, key, map) => {
  console.log("键:%s,值:%s", key, value);
});
// 键:foo,值:11
// 键:bar,值:22
// 键:mazey,值:413
登入後複製

二、WeakMap

1.定義

WeakMap物件保存鍵值對,與Map不同的是其鍵必須是對象,因為鍵是弱引用,在鍵物件消失後自動釋放記憶體。

2.語法

new WeakMap([iterable])
登入後複製

方法

  1. #set(key, 值):設定(新增/更新)鍵key的值為value,傳回WeakMap物件。

  2. get(key):讀取鍵key的值,沒有則回傳undefined。

  3. has(key):判斷一個WeakMap物件中是否存在某個鍵值對,傳回true/false。

  4. delete(key):刪除某個鍵值對,回傳true/false。

注意

因為WeakMap的特殊的垃圾回收機制,所以沒有clear()方法。

3.範例

let obj = {
  foo: 11
};
let wm = new WeakMap();
wm.set(obj, 413322);
console.log(wm); // {{…} => 413322}
console.log(wm.has(obj)); // true
登入後複製

三、透過WeakMap解決記憶體洩漏問題

當使用Dom物件綁定事件時,Dom物件消失後若沒有及時釋放記憶體(置null),便會一直存在記憶體中。

使用WeakMap儲存Dom物件不會有這樣的問題,因為Dom物件消失後,JS的垃圾回收機製會自動釋放其所佔用的記憶體。

<button type="button" id="btn">按钮</button>
<script>
let wm = new WeakMap();
let btn = document.querySelector(&#39;#btn&#39;);
wm.set(btn, {count: 0});
btn.addEventListener(&#39;click&#39;, () => {
  let v = wm.get(btn);
  v.count++;
  console.log(wm.get(btn).count);
});
// 1 2 3 4 5...
</script>
登入後複製

上面是我整理給大家的,希望未來會對大家有幫助。

相關文章:

vue結合Echarts實現點擊高亮效果的範例

vue取得目前啟動路由的方法

echarts滑鼠覆蓋高亮顯示節點及關係名稱詳解

以上是利用ES6透過WeakMap解決記憶體洩漏問題(詳細教學)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

五招教你解決黑鯊手機開不了機的問題! 五招教你解決黑鯊手機開不了機的問題! Mar 24, 2024 pm 12:27 PM

隨著智慧型手機技術的不斷發展,手機在我們日常生活中扮演著越來越重要的角色。而作為一款專注於遊戲效能的旗艦手機,黑鯊手機備受玩家青睞。然而,有時候我們也會面臨到黑鯊手機開不了機的情況,這時候我們就需要採取一些措施來解決這個問題。接下來,就讓我們來分享五招教你解決黑鯊手機開不了機的問題:第一招:檢查電池電量首先,確保你的黑鯊手機有足夠的電量。可能是因為手機電量耗盡

大內存優化,電腦升級16g/32g內存速度沒什麼變化怎麼辦? 大內存優化,電腦升級16g/32g內存速度沒什麼變化怎麼辦? Jun 18, 2024 pm 06:51 PM

對於機械硬碟、或SATA固態硬碟,軟體運轉速度的提升會有感覺,如果是NVME硬碟,可能感覺不到。一,註冊表導入桌面新建一個文字文檔,複製貼上如下內容,另存為1.reg,然後右鍵合併,並重新啟動電腦。 WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

小米14Pro如何查看記憶體佔用? 小米14Pro如何查看記憶體佔用? Mar 18, 2024 pm 02:19 PM

最近,小米發布了一款功能強大的高階智慧型手機小米14Pro,它不僅外觀設計時尚,而且擁有內在和外在的黑科技。這款手機擁有頂級的性能和出色的多工處理能力,讓用戶能夠享受快速且流暢的手機使用體驗。但效能也是會收到記憶體的影響的,很多用戶想要知道小米14Pro如何查看記憶體佔用,趕快來看看吧。小米14Pro如何查看記憶體佔用?小米14Pro查看記憶體佔用方法介紹開啟小米14Pro手機【設定】中的【應用程式管理】按鈕。查看已安裝的所有應用程式列表,瀏覽列表並找到你想查看的應用,點擊它進入應用程式詳細頁面。在應用程式詳細頁面中

小紅書發布自動儲存圖片怎麼解決?發布自動保存圖片在哪裡? 小紅書發布自動儲存圖片怎麼解決?發布自動保存圖片在哪裡? Mar 22, 2024 am 08:06 AM

隨著社群媒體的不斷發展,小紅書已經成為越來越多年輕人分享生活、發現美好事物的平台。許多用戶在發布圖片時遇到了自動儲存的問題,這讓他們感到十分困擾。那麼,如何解決這個問題呢?一、小紅書發布自動儲存圖片怎麼解決? 1.清除快取首先,我們可以嘗試清除小紅書的快取資料。步驟如下:(1)開啟小紅書,點選右下角的「我的」按鈕;(2)在個人中心頁面,找到「設定」並點選;(3)向下捲動,找到「清除快取」選項,點擊確認。清除快取後,重新進入小紅書,嘗試發布圖片看是否解決了自動儲存的問題。 2.更新小紅書版本確保你的小

消息稱三星電子、SK 海力士堆疊式行動記憶體 2026 年後商業化 消息稱三星電子、SK 海力士堆疊式行動記憶體 2026 年後商業化 Sep 03, 2024 pm 02:15 PM

本站9月3日消息,韓媒etnews當地時間昨報道稱,三星電子和SK海力士的「類HBM式」堆疊結構行動記憶體產品將在2026年後實現商業化。消息人士表示這兩大韓國記憶體巨頭將堆疊式行動記憶體視為未來重要收入來源,並計劃將「類HBM記憶體」擴展到智慧型手機、平板電腦和筆記型電腦中,為端側AI提供動力。綜合本站先前報導,三星電子的此類產品叫做LPWideI/O內存,SK海力士則將這方面技術稱為VFO。兩家企業使用了大致相同的技術路線,即將扇出封裝和垂直通道結合在一起。三星電子的LPWideI/O內存位寬達512

三星宣布完成 16 層混合鍵結堆疊製程技術驗證,預計在 HBM4 記憶體大面積應用 三星宣布完成 16 層混合鍵結堆疊製程技術驗證,預計在 HBM4 記憶體大面積應用 Apr 07, 2024 pm 09:19 PM

報告稱,三星電子的高層DaeWooKim表示,在2024年韓國微電子和封裝學會年會上,三星電子將完成採用16層混合鍵結HBM記憶體技術的驗證。據悉,這項技術已通過技術驗證。報告也稱,此次技術驗證將為未來若干年內的記憶體市場發展奠定基礎。 DaeWooKim表示,三星電子成功製造了基於混合鍵合技術的16層堆疊HBM3內存,該內存樣品工作正常,未來16層堆疊混合鍵合技術將用於HBM4內存量產。 ▲圖源TheElec,下同相較現有鍵合工藝,混合鍵結無需在DRAM記憶體層間添加凸塊,而是將上下兩層直接銅對銅連接,

美光:HBM 記憶體消耗 3 倍晶圓量,明年產能基本預定完畢 美光:HBM 記憶體消耗 3 倍晶圓量,明年產能基本預定完畢 Mar 22, 2024 pm 08:16 PM

本站3月21日消息,美光在發布季度財報後舉行了電話會議。在該會議上美光CEO桑傑・梅赫羅特拉(SanjayMehrotra)表示,相對於傳統內存,HBM對晶圓量的消耗明顯更高。美光錶示,在同一節點生產同等容量的情況下,目前最先進的HBM3E內存對晶圓量的消耗是標準DDR5的三倍,並且預計隨著性能的提升和封裝複雜度的加劇,在未來的HBM4上這一比值將進一步提升。參考本站以往報道,這一高比值有相當一部分原因在HBM的低良率上。 HBM記憶體採用多層DRAM記憶體TSV連線堆疊而成,一層出現問題就意味著整個

雷克沙推出 Ares 戰神之翼 DDR5 7600 16GB x2 內存套條:海力士 A-die 顆粒,1299 元 雷克沙推出 Ares 戰神之翼 DDR5 7600 16GB x2 內存套條:海力士 A-die 顆粒,1299 元 May 07, 2024 am 08:13 AM

本站5月6日消息,雷克沙Lexar推出Ares戰神之翼系列DDR57600CL36超頻內存,16GBx2套條5月7日0點開啟50元定金預售,至手價1299元。雷克沙戰神之翼記憶體採用海力士A-die記憶體顆粒,支援英特爾XMP3.0,提供以下兩個超頻預設:7600MT/s:CL36-46-46-961.4V8000MT/s:CL38-48-49 -1001.45V散熱方面,此內存套裝搭載1.8mm厚度的全鋁散熱馬甲,配備PMIC專屬導熱矽脂墊。記憶體採用8顆高亮LED燈珠,支援13種RGB燈光模式,可

See all articles