客戶端性能優化
通用優化經驗
1、如無必要,不要在onFrame onSecond onRender這種頻繁刷新的事件中,進行大量復雜的運算,或者創建對象,這些事件太頻繁了,執行復雜操作對性能開銷很大
2、使用緩沖池技術,把頻繁使用的數據或者對象緩存起來,避免重復創建
3、不再使用的對象,需要記得回收掉,remove del clear等
4、不要再舞臺或者畫布上,放置大量的需要渲染的對象,太多的顯示對象會嚴重影響渲染效率
例如在使用fancy3d時,如果在一個UI界面上,同時加載3個或者更多drawboard,每個drawboard加載1個3D模型或者場景,這樣的效率極差,優化的辦法是合並,例如把3個模型放入同一個場景中,UI上只有一個drawboard負責加載這一個場景即可
5、使用圖集技術,降低io和數據訪問次數
6、顯式停止計時器,讓它們準備好進行垃圾回收
7、使用事件偵聽器並在不需要時刪除這些偵聽器
8、多次調用類屬性或者需要從多層嵌套的數組中取值時,避免直接使用this.att,建立局部變量賦值,例如 this.attrs.att => var attrs = this.attrs attrs.att
9、把一些常用的參數創建為全局變量,避免重復定義
fancy3d項目中,創建一個全局Vector3對象,供客戶端運算使用,避免了在使用時重復創建vector3對象的問題
內存泄漏
1、UI泄漏
2、實體泄漏
①各種程序創建的對象的泄漏
忘記回收
由於實體被別的地方引用,導致回收不掉
②美術資源制作時候,由於沒有按照規範,導致的實體泄漏,常見的是特效泄漏
在fancy3d項目中,由於特效制作時,沒有正確的設置粒子的生命周期,導致技能特效顯示後不能自動回收,導致客戶端特效泄漏
3、代碼邏輯導致
egret客戶端優化參考資料
egret渲染優化 https://blog.csdn.net/bibimybest/article/details/80519576
egret內存泄漏 https://blog.csdn.net/yangxuan0261/article/details/81260498
客戶端性能優化