性能優化主要這幾個方面進行優化:加載優化,渲染優化,內存優化,CPU優化及一些小技巧。
加載優化
圖片資源處理:巧用九宮格拉伸來實現資源得復用,如大的純色背景圖,完全可以使用一張小圖來進行拉伸獲得;
使用圖集:圖集有3個好處,
1.減少文件數量,提升加載速度
2.減少體積
3.減少DrawCall
壓縮:包括圖片,紋理,音頻文件的壓縮,打包成圖集之后,需要進行壓縮
Prefab加載優化:
1.合理拆分預制體:
1)實現最小單元資源復用
2)預制體越大消耗時長呈指數上升
2.開啟延遲加載資源:勾選這個選項可以減少prefab的加載耗時,但首次顯示的耗時會增加。
因為由於勾選后,prefab所引用的資源,像圖片、音效這些,不會在load時加載,而是會在prefab第一次顯示的時候再進行資源的加載。因此需要根據具體的使用環境進行選擇。
3.選擇優化策略:
1)自動調整,creator根據加載方式自動調整優化策略,一般選擇這個即可
2)優化單次創建性能,加載時的耗時會減少很多,但實例化時的耗時會增加
3)優化多次創建性能,實例化時的耗時將會大大減少,相應的,在load時的耗時會有所增加
場景加載優化:
1.合理使用預置體構成場景,分批異步進行加載
2.使用加載界面優化用戶體驗
3.開啟延遲加載資源
資源批量加載優化:使用分幀加載,第三方庫async.eachLimit
裁剪引擎模塊:這一步通常在游戲上線前,將不需要的模塊刪除,減少包體大小
渲染優化
渲染優化,主要針對drawcall的優化:
drawcall即CPU調用圖形繪制接口的次數;
1.使用圖集,creator自帶了自動合集功能,也可以使用其他第三方工具
2.資源規划,盡量做到相同界面的資源放在相同得文件夾中,通用資源放在通用目錄下,有以下好處
1)方便打包成合集
2)減少內存占用,方便使用內存
3.減少使用系統字體,使用BMFont(2.09之后可以使用字體緩存),減少使用描邊,mask,富文本
4.調整渲染順序:AABCB,這樣順序,改為AABBC順序,渲染合批就不會被打斷
內存優化
靜態資源優化:使用場景的自動釋放資源
動態資源優化:
1.設置自動釋放資源
cc.loader.setAutoRelease //設置自動釋放資源
cc.loader.setAutoReleaseRecursively //設置該資源及其資源遞歸引用到的所有資源
動態資源的釋放需要用戶自己設置,設置為自動釋放資源之后,切換場景后,該動態資源會自動釋放
2.手動釋放資源
cc.loader.getDependsRecursively //獲取prefab所引用的所有資源
cc.loader.release(this.prefab); //釋放資源
一般這樣使用:
cc.loader.setAutoRelease(texture2d,false); //設置為自動釋放,保留這份資源不想釋放
let deps = cc.loader.getDependsRecursively('prefabs/sample');
let index = deps.indexof(texture2d._uuid);
if(index !== -1)
deps.splice(index,1);
cc.loader.release(deps);
3.使用對象緩存池
CPU優化
cpu優化主要是對代碼邏輯進行優化:
1.數組的push可以改為arr[arr.lenght] = 0;
2.for效率,可以參考我的這篇文章 https://www.cnblogs.com/kefeiGame/p/8391859.html
3.不要使用try-catch or try-finally , eval ,arguments
4.優化算法
雜項
使用谷歌瀏覽器的Performance定位CPU問題
使用谷歌瀏覽器的Memory定位內存問題