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