Egret的性能優化不知道在哪里啊,主要參考Laya的性能優化,都差不多
一、性能統計面板
index.html頁面設置data-show-fps=true打開性能面板
Egret沒有內存占用查看,F12瀏覽器中Memory查看內存占用
二、內存優化
1.對象池
減少了實例化對象時的開銷,且能讓對象反復使用,減少了新內存分配與垃圾回收器運行的機會
用了對象池后將減少程序的垃圾對象,有效的提高程序的運行速度和穩定性
還是laya的精簡...
/** *<p> <code>Pool</code> 是對象池類,用於對象的存貯、重復使用。</p> *<p>合理使用對象池,可以有效減少對象創建的開銷,避免頻繁的垃圾回收,從而優化游戲流暢度。</p> */ //class laya.utils.Pool var Pool=(function(){ function Pool(){} __class(Pool,'laya.utils.Pool'); Pool.getPoolBySign=function(sign){ return Pool._poolDic[sign] || (Pool._poolDic[sign]=[]); } Pool.clearBySign=function(sign){ if (Pool._poolDic[sign])Pool._poolDic[sign].length=0; } Pool.recover=function(sign,item){ if (item["__InPool"])return; item["__InPool"]=true; Pool.getPoolBySign(sign).push(item); } Pool.getItemByClass=function(sign,cls){ var pool=Pool.getPoolBySign(sign); var rst=pool.length ? pool.pop():new cls(); rst["__InPool"]=false; return rst; } Pool.getItemByCreateFun=function(sign,createFun){ var pool=Pool.getPoolBySign(sign); var rst=pool.length ? pool.pop():createFun(); rst["__InPool"]=false; return rst; } Pool.getItem=function(sign){ var pool=Pool.getPoolBySign(sign); var rst=pool.length ? pool.pop():null; if (rst){ rst["__InPool"]=false; } return rst; } Pool._poolDic={}; Pool.InPoolSign="__InPool"; return Pool; })()
關於對象池對於效率有多少提高,沒有實測,得根據實例化和銷毀對象的性能消耗來判定。
三、垃圾回收、資源卸載、釋放內存
垃圾回收方式:標記清除、引用計數
垃圾回收時間:固定間隔、上限
游戲中除了常用的事件監聽的移除、對象引用設置為null等等,對於資源加載使用后,也要即時卸載。
四、渲染優化
1. drawcall
吃飯去了,待編輯...