# 性能优化建议与最佳实践
本章节主要介绍,常见界面的最佳实践,性能优化策略。
阅读前,可以先浏览 二维系统的整体架构 了解大致运行机制。
通常情况下,由于大部分逻辑在客户端处理,二维部分的性能消耗并不会很高,
大部分情况下,主要的开销在:解析构建,遍历更新。
# 优化建议
# 渲染节点重用
实例化 Prefab ,会触发节点树的构建与组件反序列化赋值,会涉及到客户端组件的创建,成本相比属性更新会更高。
# 渲染节点重用实践
将 实例化后的 Prefab 节点回收
,挂到一个非 active 的子树中,当需要使用时,将整个 Prefab移回场景。
# 遍历优化(增删节点)
二维世界通常存在大量的二维节点,某个渲染节点的增删,会影响整个二维世界渲染顺序的变更,会导致重新遍历取获取渲染队列。
# 遍历优化实践 - 动静分离
使用 UILayer组件 将频繁增删的节点区分在特定的子树中。
# 绘制优化
绘制的成本 - DrawCall数量
# 自动合批策略
客户端在渲染前,会根据相邻的渲染元素,材质
(渲染类型、纹理),渲染状态
(裁剪状态、混合状态),去匹配是否能进行合批,将多次渲染合成一次。
# 自动合批实践
尽可能将,同一类型
,使用 同一贴图
的渲染元素,放在相邻渲染顺序。
# GC(垃圾回收)优化
由于 Javascript 的弱类型语言特性,临时对象需要回收,可能会导致游戏的掉帧。
GC时间
:游戏内总对象的数目
GC频率
:游戏临时对象的数目
# GC(垃圾回收)优化实践
- 渲染组件尽可能不使用对象获取接口(position、color、...),而采用对象属性获取接口(positionX...),或只调用对象的setter。
- 尽可能不创建临时对象,而采用全局临时对象赋值(Vector2、Color...)