沒有resolve及reject的Promise是否會造成內存泄露
正文
DevTools測試
可以用 DevTools 的 queryObjects()函數(shù)配合 setTimeout()來測試一下:


可以看到 1 萬個 pending 的 promise 對象都不會被回收,直到 10 秒鐘以后,再次執(zhí)行queryObjects(Promise):
執(zhí)行queryObjects(Promise)


那 1 萬個 promise 對象是被回收了,但又多出一個 pending 的 promise 對象,可能是 DevTools 上執(zhí)行命令的副作用。
測試事件回調
還可以測試一下通過事件回調來 resolve 的情況:


點擊一下頁面后,再次執(zhí)行 queryObjects(Promise),居然已經 resolve 了的 1 萬個 promise 對象還是沒被回收,不懂了。


總之,queryObjects()可以遍歷出 V8 堆上以某對象為原型的對象們,而且執(zhí)行前會先做一次垃圾回收,學到這個就夠了。
可疑的泄露對象
另外如果你真找到了可疑的泄露對象,卻不知道被誰引用了,Safari 的 DevTools 剛剛實現(xiàn)了一個叫 queryHolders(target)的函數(shù),它可以找到某個對象被哪些對象所引用了:


V8 的人看到了表示 V8 底層也支持這個功能,Chrome DevTools 上也可以加,估計很快就能實現(xiàn)了。
以上就是沒有resolve及reject的Promise是否會造成內存泄露的詳細內容,更多關于Promise內存泄露的資料請關注腳本之家其它相關文章!
相關文章
微信小程序 <swiper-item>標簽傳入數(shù)據(jù)
這篇文章主要介紹了微信小程序 <swiper-item>標簽傳入數(shù)據(jù)的相關資料,需要的朋友可以參考下2017-05-05
自定義range?sliders滑塊實現(xiàn)元素拖動方法
這篇文章主要為大家介紹了自定義range?sliders滑塊實現(xiàn)元素拖動方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

