Draw Call 650左右
这个是一个列表的 100个列表项的情况
如果 这6个子也签 都有200个左右列表项,手机还能跑到50帧吗?
当然不是同时显示, 同时只有1个也签的 列表 200个列表项
但其他的子也签 也在内存中,
CONTENT.active = true;
再显示,并且隐藏之前的列表
Draw Call 650左右
这个是一个列表的 100个列表项的情况
如果 这6个子也签 都有200个左右列表项,手机还能跑到50帧吗?
当然不是同时显示, 同时只有1个也签的 列表 200个列表项
但其他的子也签 也在内存中,
CONTENT.active = true;
再显示,并且隐藏之前的列表
能跑,就是打开和切换的时候,会卡
200 dc中低端都卡了,自己想想 600 是什么情况吧
这个肯定卡的,得优化Draw Call
1、列表子项最好能循环利用,最好的再加一个列表分层;
2、文本与图片分开,不要穿插使用;
3、合图集;
这样大概能减少90%的DC
这显示窗口内的 列表项 才显示
itemNode.active = true;
否则
itemNode.active = false;
这个就能解决一部分吗?
你这个很容易用虚拟列表啊,然后如果不想用,判断一下,不显示的那些item的透明度设置为0就好了,active会使layout出问题。
好的 多谢啦!
这ui不错,但drawcall有些高
能解决一点,但是重点在于列表占用了太多的DC,所以主要在这个做优化
这个如何优化?吧 头像放一个大图集里?
就算相同的头像 也还是DC很高 !
列表的优化,论坛很多帖子,先去看看~
这个很好优化啊,这种界面drawcall不会过20的
肯定用虚拟列表啊
下面的文本可以用位图 能减少不少DC
我遇到vivo一台20年的千元机,50drawcall左右,只有40帧左右。。。cpu是晓龙430。。。
我之前搞过一个大列表的需求,根据列表数量计算content的height,监听ScrollView的scrolling事件,用content的y,计算处于展示框的下标范围,更新item的内容和坐标,只需要创建8~9个就能实现一个三千左右的大列表,不过在低端机上没试过,没太注意性能
你是说 超出可视范围 不创建,仅给出CONTENT的高度,
再可视范围 时再用 8·9个列表项来更改 列表项UI的内容
我现在是 都创建,但可视窗口外的 透明度=0,这样创建时间有点卡,之后 滚动就顺滑了
如果在 滚动时 再修改列表项内容 不知道会不会 滚动不顺啊!
这里得性能开销主要有两个,一个是大量创建预制体时候的开销,还有一个创建好了后,drawcall带来的性能问题。600多的drawcall是一定会卡的,打开的时候卡顿明显,还有就是手机发热严重。
针对大量创建预制体的性能开销,你可以选择分帧加载,不要一下子创建完。这种方案虽然解决了创建问题,但是drawcall并没有减少。针对drawcall带来的性能问题,可以判断节点有没有在mask节点内,不在的话,就把节点的opacity改为0。这样就会解决drawcall过高的问题,但是如果你的列表里节点过多,会带来新的开销:在列表滑动的过程中,一直判断节点是不是在mask节点内。
所以,一劳永逸的办法就是,创建比可视区域多一两个节点的方案,这样就解决了上述两个问题。