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