如何清理VUE內(nèi)存?
分享一下我是怎么解決這個(gè)問(wèn)題的,原因大概在兩方面:
一、把three.js中的對(duì)象定義到了data里
首先非數(shù)據(jù)的東西不要掛在到data上,比如three.js中的renderer, camera,scene這些對(duì)象,可以在created或者mounted鉤子里設(shè)置到this上或者存儲(chǔ)在其它變量里,如果是定義在data上的話(huà),Vue會(huì)遍歷整個(gè)對(duì)象樹(shù)設(shè)置對(duì)應(yīng)的getter/setter,造成不必要的性能開(kāi)銷(xiāo)。
二、組件銷(xiāo)毀時(shí)沒(méi)有做清理工作
如果是把renderer,mesh這些對(duì)象存儲(chǔ)在當(dāng)前vm實(shí)例上的話(huà),需要手動(dòng)清理(這里假設(shè)Vue不對(duì)自定義屬性做清理,未驗(yàn)證過(guò))。特別是你開(kāi)啟了熱更新,每改動(dòng)一次js代碼實(shí)例就被銷(xiāo)毀和重新創(chuàng)建,如果不斷掉引用,它們就會(huì)一直保存在內(nèi)存中,可想而知占用有多大。
最后,記得每一次動(dòng)畫(huà)里的requestAnimationFrame都要把id保存下來(lái),在組件銷(xiāo)毀時(shí)cancelAnimationFrame掉。