注意:主要针对的是js,ts语言
- 逻辑优化
- 数组排序时可以使用自带的 sort() 方法。
- 数组本地存储时可以考虑联合字典进行使用,方便查找。
- 当同一类数据较多时,在传输时可以进行数据堆叠,减少查找的时候计算较大。
- 减少不必要的console.log() 输出。
- 避免在update里面做耗时操作(比如:读写文件、播放音效)。
- 大量预制体prefab实例化,可以分帧创建,避免顿卡。
- 功能实现尽可能使用最优方案,减少不必要的逻辑。
- 对于背包等需要生成大量预制体的界面可以引入对象池。
- 对于经常出现,展示的节点可以进行控制显示隐藏而不是删除和生成。
- 本地数据存储时,可以更改数据结构,用空间换时间。
- 性能优化
- DrawCall优化
- .将碎图打图集,同一图集的资源尽可能放在一起,单个图集不宜过大。
- .减少richText的使用。
- .文字可以考虑使用美术字来代替(比较简单的或者无需经常修改的)。
- 进行label合并,达到减少label的数量
- 资源包体优化
- .去掉多余的资源以及代码,减少代码逻辑的重复性。
- .背景图等可使用jpg图片。
- .面对较大图集时,可以打图集时缩小倍数打图集再放大使用。
- .png图片进行压缩,纹理单一图片缩小后通过九宫格使用,png适当降低品质。
- .构建发布时,可以将未曾使用的功能模块勾选掉。
- .动画如果帧动画内存过多可以改成骨骼动画。
- 内存优化
- .静态资源的内存管理:静态资源指的是场景中直接或间接引用到的所有资源(脚本动态加载的资源不算在内)。在场景资源的属性编辑器中可以勾选“自动释放资源”选项,从而在切换场景时,会自动将旧场景使用的静态资源释放掉,从而节省内存的占用。
- .动态资源统一使用cc.loader进行资源的加载以及管理。
- 优化双份纹理 :
这里面的原理是,当Creator使用DOM的Image对象去加载一个图片资源的时候,微信底层的引擎会解码图片数据,同时往GPU上传一份纹理,然后引擎的Sprite在渲染的时候会使用这个DOM Image再生成一份GPU纹理并上传,导致GPU里面存在双份纹理。使用 Image.scr = '' 可以释放掉GPU里面多出来的一份纹理,同时也会释放CPU端解码的纹理内存。所以,基本上对 Image对象调用了 src = '' 这个操作,这个Image对象占用的内存就释放干净了。
4.使用对象池
5.UI不删除进行隐藏
- 优化资源释放 :对于二级弹框和场景资源释放,可以使用cc.loader.release接口配合场景的“自动释放”属性来实现 。
- 其它优化
- .减少Mask、LabelOutLine组件的使用。
- .优化节点树,尽量减少节点数量,防止单一预制体过于复杂。
- .控制游戏帧率。
- .单功能尽可能使用自身的图集,不要交叉使用。
- .部分预制体可以勾选延迟加载,减少预制体加载耗时,但首次加载速度降低,合理使用。
- .复杂逻辑不要放入onLoad()中,放入start()中,可以加快预制体的加载速度。
参考网址:
CocosCreator 常用优化点_cocos creator资源优化-CSDN博客