CocosCreator整體內存與性能優化


一、內存優化

 

因為 iOS小游戲和微信共用同一個進程,而微信在連續兩次收到系統內存警告的時候會關閉小游戲並釋放小游戲占用的內存。如果你的小游戲有外網用戶反饋“閃退”,或者你自己測試的時候頻繁出現“該小程序可能導致微信響應變慢被終止”等提示,那么就應該是時候優化你的小游戲內存了!

 

1、優化雙份紋理(必做!)

在你的項目中添加如下代碼,就可以減少大量內存:

分享圖片

這里面的原理是,當Creator使用DOM的Image對象去加載一個圖片資源的時候,微信底層的引擎會解碼圖片數據,同時往GPU上傳一份紋理,然后引擎的Sprite在渲染的時候會使用這個DOM Image再生成一份GPU紋理並上傳,導致GPU里面存在雙份紋理。使用 Image.scr = ‘‘ 可以釋放掉GPU里面多出來的一份紋理,同時也會釋放CPU端解碼的紋理內存。所以,基本上對 Image對象調用了 src = ‘‘ 這個操作,這個Image對象占用的內存就釋放干凈了。

之前嘗試使用DOM Image pool,當一個圖片資源解碼成功並且上傳GPU以后,把這個Image對象的src置空后放入池子,然后重復利用。不過對比了一下內存占用,感覺 src = ‘‘ 之后內存立即就釋放了,優化作用並不是很明顯。

 

2、優化圖集

最好對所有的碎圖資源進行圖集合並(Creator自帶一個自動圖集合並工具),並且最大限度填滿圖集,不要留有太多空白。圖集的大小盡可能限制在1024*1024以下,因為有些圖片有不少透明像素,合並圖集的時候可以trim掉這些透明像素。另外合圖還可以優化Drawcall,減少圖片讀取和解碼操作,對性能也有一定優化。

另外,對於顯示效果要求不高的界面,可以適當降低圖片的尺寸。

 

3、優化資源釋放

對於二級彈框和場景資源釋放,可以使用cc.loader.release接口配合場景的“自動釋放”屬性來實現 。

對於一個二級面板,我們可以約定這個二級面板引用的資源范圍。我們把游戲中共用的資源放到Common圖集中,把每個二級面板的資源放到自己的圖集中。當釋放資源的時候,我們可以通過 cc.loader.getDependsRecursively(‘prefab url’) API拿到面板Prefab所引用的所有資源,然后對這個返回的資源數組做資源釋放。

 

二、性能優化

 

目前小游戲的性能瓶頸大多在JS層面,可以使用Chrome先去profiles性能熱點,然后針對性地去做優化。

這里給出幾點優化建議:

1、游戲中頻繁更新的文字,推薦使用BMFont,系統字體會比較消耗性能。

2、優化Drawcall,盡可能減少Drawcall數量。

3、渲染順序調整,屬於同一合集的紋理節點盡量一起渲染,中間盡量不要參雜其他紋理

4、減少Mask組件的使用,該組件會導致游戲中的Drawcall數量變多。

5、禁用引擎的culling,禁用方法cc.macro.ENABLE_CULLING = false。

6、如果使用物理引擎,可以把物理引擎的step間隔調大。

7、優化節點樹,減少節點數量。

8、場景中不要掛載過多的Prefab,可適當將一些Prefab變成動態加載的。

 

三、包體優化

 

因為微信小游戲對於包體有4M的限制,最近才剛開始升到8M,但是必須要分包,而且每一個分包的大小還是不能超過4M。

下面給出一些優化建議:

1、首包中不要包含過多的資源,如果一定要包含,請務必壓縮。對於背景圖片可以使用JPG,PNG圖片可以使用png8進行壓縮。

2、代碼必須使用uglify進行壓縮,尤其是第三方庫,游戲代碼如果使用release構建引擎有做uglify。如果想進一步壓縮代碼體積,需要考慮使用Google Closure Compiler進行高級壓縮。

3、不需要動態加載的圖片資源不要放到resources目錄,放到此目錄的資源在構建導出的時候,會生成資源映射關系到Settings.js中,會導致該Settings.js文件變大。另外為了防止緩存問題,需要使用md5,此時Settings.js文件會進一步膨脹。過氣的活動Prefab也可以移出resources目錄,所以定期資源清理也是必要的。

4、Settings.js文件優化,可以自己寫腳本把md5Map里面的rawAssets的md5映射存到原本的rawAssets中,然后在boot.js里面還原md5Map即可。

分享圖片
分享圖片

5、一定要使用release模式構建,這種方式構建出來的json資源會壓縮,Settings.js也會優化。

6、對於引擎不使用的模塊進行裁剪,這個可以減少引擎大小。

 

原文 : http://morecoder.com/article/1279126.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM