沒(méi)有resolve及reject的Promise是否會(huì)造成內(nèi)存泄露
正文
DevTools測(cè)試
可以用 DevTools 的 queryObjects()
函數(shù)配合 setTimeout()
來(lái)測(cè)試一下:
可以看到 1 萬(wàn)個(gè) pending 的 promise 對(duì)象都不會(huì)被回收,直到 10 秒鐘以后,再次執(zhí)行queryObjects(Promise)
:
執(zhí)行queryObjects(Promise)
那 1 萬(wàn)個(gè) promise 對(duì)象是被回收了,但又多出一個(gè) pending 的 promise 對(duì)象,可能是 DevTools 上執(zhí)行命令的副作用。
測(cè)試事件回調(diào)
還可以測(cè)試一下通過(guò)事件回調(diào)來(lái) resolve 的情況:
點(diǎn)擊一下頁(yè)面后,再次執(zhí)行 queryObjects(Promise)
,居然已經(jīng) resolve 了的 1 萬(wàn)個(gè) promise 對(duì)象還是沒(méi)被回收,不懂了。
總之,queryObjects()
可以遍歷出 V8 堆上以某對(duì)象為原型的對(duì)象們,而且執(zhí)行前會(huì)先做一次垃圾回收,學(xué)到這個(gè)就夠了。
可疑的泄露對(duì)象
另外如果你真找到了可疑的泄露對(duì)象,卻不知道被誰(shuí)引用了,Safari 的 DevTools 剛剛實(shí)現(xiàn)了一個(gè)叫 queryHolders(target)
的函數(shù),它可以找到某個(gè)對(duì)象被哪些對(duì)象所引用了:
V8 的人看到了表示 V8 底層也支持這個(gè)功能,Chrome DevTools 上也可以加,估計(jì)很快就能實(shí)現(xiàn)了。
以上就是沒(méi)有resolve及reject的Promise是否會(huì)造成內(nèi)存泄露的詳細(xì)內(nèi)容,更多關(guān)于Promise內(nèi)存泄露的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript前端迭代器Iterator與生成器Generator講解
這篇文章主要為大家介紹了JavaScript前端迭代器Iterator與生成器Generator講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08You-Dont-Know-JS作用域?qū)W習(xí)文檔
這篇文章主要介紹了You-Dont-Know-JS作用域?qū)W習(xí)文檔,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08JavaScript獲取上傳文件相關(guān)信息示例詳解
這篇文章主要為大家介紹了JavaScript獲取上傳文件相關(guān)信息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08