一、内存优化
1.对象池优化,LayaAir引擎中的对象池:laya.utils.Pool
2.使用含有对象池的Handler处理异步回调
Handler()没有使用对象池,Laya.Handler.create()使用了对象池
3.将不使用的对象设置为null,TypeScript最终编译成JavaScript,而JavaScript运行时无法启动垃圾回收器,当对象设置为null时,不会立即将其从内存中删除,只有系统认为内存足够低时,垃圾回收器才会运行,内存分配(不是对象删除)会触发垃圾回收,当存在循环引用时,垃圾回收无法回收。
4.当不需要使用的资源时,使用Laya.loader.clearRes将资源卸载
5.尽量避免大量使用滤镜、遮罩,或者能不用就不要用。如果需要滤镜效果直接让美术模拟出图
二、图形渲染
1.降低显示对象的嵌套层次,减少sprite数量
2.将不可见区域的对象尽量移除或设置visible = false(移除 优先 visible = false)
3.将静态内容(加载后不会一直刷新变化的内容)设置cacheAs属性为"normal"或"bitmap"
4.尽量保证图片渲染顺序是挨着的,尽力不要让不同图集交叉渲染
5.尽力保证一个面板所有资源来源一个图集,以此减少提交批次
6.对于需要持续变更文本内容的Label,使用changeText方法变更文本,这就如Flash中append方法


(1)使用changeText设值 (2)使用.text设值
上面两张图都是创建10000个文本,并每秒更新文本内容,内容为当前时间戳,其实我并没有感受到性能差距,不过这样做总是好的~~~~
三、CPU优化
1.JavaScript中任何对象都是动态的,在大量的属性里查找某属性可能会很消耗性能,如果需要频繁使用某个属性值,可设置为局部变量进行引用
2.对于两种计时器(帧计时,时间计时)在不使用的时候都需要及时销毁
3.在使用Laya的时候会遇到一个坑,在给sprite绘制纹理的时候,无法获取sprite尺寸,这是Laya出于性能考虑,在绘制纹理后需自行通过Texture尺寸设置sprite尺寸,重复触发autoSize对于大量子对象的容器是不可取的。
4.对于频繁操作,可以使用延迟调用的方法,避免重复高频计算,在Laya中使用callLater方法实现
5.良好的资源加载及卸载管理
文档连接:https://ldc.layabox.com/doc/?nav=zh-ts-0-3-0