CacheAs静态缓存优化

本文探讨了在UI开发中如何使用CacheAs属性来优化渲染性能。内容涉及到CacheAs的none、normal、bitmap三种模式的差异,以及在不同场景下的适用性。建议在不频繁变化的复杂内容上使用静态缓存以提高性能,但需要注意内存开销和drawcall的影响。通过DebugPanel进行测试,以确定最佳的缓存策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

合理使用CacheAs静态缓存优化可以提高渲染性能

CacheAs属性值有none、normal、bitmap,默认为none;

* <p>指定显示对象是否缓存为静态图像,cacheAs时,子对象发生变化,会自动重新缓存,同时也可以手动调用reCache方法更新缓存。</p>

* <p>建议把不经常变化的“复杂内容”缓存为静态图像,能极大提高渲染性能。cacheAs有"none","normal"和"bitmap"三个值可选。

* <li>默认为"none",不做任何缓存。</li>

* <li>当值为"normal"时,canvas模式下进行画布缓存,webgl模式下进行命令缓存。</li>

* <li>当值为"bitmap"时,canvas模式下进行依然是画布缓存,webgl模式下使用renderTarget缓存。</li></p>

* <p>webgl下renderTarget缓存模式缺点:会额外创建renderTarget对象,增加内存开销,缓存面积有最大2048限制,不断重绘时会增加CPU开销。优点:大幅减少drawcall,渲染性能最高。

* webgl下命令缓存模式缺点:只会减少节点遍历及命令组织,不会减少drawcall数,性能中等。优点:没有额外内存开销,无需renderTarget支持。</p>

cacheAs使用的选择

当对象非常简单,比如一个字或者一张图片时,设置cacheAs不但不提高性能,反而会损失性能;

对于经常变化的内容,如果设置了casheAS,则由于容器内频繁变化,导致频繁重绘,也会损失性能;

至于使用casheAS时选择normal还是bitmap,normal性能优化程度不如bitmap,但是内存开销比bitmap小,

且没有2048大小的限制;bitmap模式,在webGL下renderTarget缓存模式有2048大小限制,

超出2048会额外增加内存开销。不适用于低端机。

测试是否频繁重绘

DebugPanel.init();调出调试窗口

选“显示当前cache重绘”选项或“显示所有重绘区域”。如果UI进行重绘了,重绘区域会显示出绿色框线,绿色框的左上角显示了重绘次数与重绘时间,性能统计工具的Sprite、DrawCall等也会发生改变。

在没有鼠标操作的情况下,如果绿色线框频繁出现,说明UI在频繁的重绘,那么最好不要用bitmap缓存模式,normal模式可以酌情考虑

 

总结起来就是,UI节点数(包括容器)较多时,能用casheAS时(能用casheAS的两个条件:1、节点数较多;

2、没有频繁变动;),兼容低端设备或者就用normal,不用兼容低端设备就用bitmap。节点数越多,使用casheAS后,

优化效果越明显。

 

实际开发时,不知如何取舍时,可以根据实际情况,分别设置cashAs和不设置cashAs,根据最终统计面板数据进行选择

DrawCall尽量控制在100以下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值