哎,入坑了,骑虎难下了

引擎版本3.7.1

游戏快要上线了,跑了一下微信小游戏的测试


大红色的运行性能49分,一下子把我唬住了,我看了一下详细报告想知道为什么


dc也不高,三角面也不高,顶点数也不高,为什么帧率上不去了,难道是我的脚本逻辑太耗时了?

所以,我打了一个空包,放了一个label在场景里,在一台99新女生自用的ipad上看了一眼


每帧耗时大概不到5ms的水平,只有偶尔能掉到2ms

我又打了一个包,在场景里显示200个相同图片


帧耗时维持在了14左右

我1帧只有16.6ms,渲染就花掉14,官方文档也没说一说ccc应该如何开发能在微信小游戏平台运行的非demo项目
我还傻乎乎的在那边吭哧瘪肚的合图集,跳渲染,降dc

我甚至节点隐藏起来就立马off掉触摸回调,生怕那坑爹的_pointerEventProcessorList太大了影响排序和遍历性能
我甚至不舍得new一个Vec3而到处复用,生怕new和delete大量对象太耗时
我甚至不敢用splice来删除数组的一个元素
我TM的甚至都去测试各种遍历数组的语法糖到底哪种更快一点

突然我明白了,搞了那么多抠抠搜搜的东西,头发掉光了也就每帧快2ms,就是自己骗自己,卵用没有,
搞来搞去依然是一个锁了30帧都还在掉帧的烂项目,资金不断花光,一直亏到死

晚上回到家里,煮了点面吃,一边吃面一边哭,泪水滴到碗里,没开灯。

4赞

看样子不大像是虎,自己做的选择,能怪谁,真正的同时显示多张图片的商业项目建议至少得用laya,性能方面我还是不大看好cocos,起码目前来说它不具备这个能力,laya的团队更加有实力

200个图片 30 帧不到?能发我一个观摩一下吗?

14ms的帧耗时,是能跑满60的,我图中是锁30帧了

哎,我是没有机会再折腾了

虽然我也是个小黑子。。但是垃圾iphonex跑2000个还是很轻松的把,

限制FPS到30的主要目的是为了降低功耗,减少,相当1祯是33ms,引擎统计的祯时间是翻倍的。

不是说切换到30FPS,统计的祯开销就会减少,反而是增加(实际每次update开销是一样的),主要目的是减少CPU和GPU的发热

60fps 时间是5ms左右


30fsp 时间是11ms左右

所以你14ms,一帧是有33ms的,你切换到60fps 也就是7ms
另外上个自定义物理碰撞的数据

补一个30FPS的极限,11000个左右才会突破33MS,如果shader 片元去色 降低精度,到14000 左右应该是ok的

2d 游戏测试200,测试的时候不要开Debug模式,同时不用锁帧*场景值判断

1赞

很久没看到性能测试的帖子了

2赞

大佬你这能力去找个班上吧,单人还是太难了 :zipper_mouth_face: :zipper_mouth_face:

换引擎 laya试试看

晚上回到家里,煮了点面吃,一边吃面一边哭,泪水滴到碗里,没开灯。
为啥不开灯,怕你房间实施阴影消耗大自然的性能嘛 :joy:

2赞

关灯吃面-百度百科

抱歉,原来是我out了 :rofl:

感谢大佬关注,但看了大佬的回复我更疑惑了

看大佬发的图,确实是和描述一致,锁30帧后帧耗时统计确实翻倍了,但是我在本地用我的正式项目测试,发现锁不锁帧是不影响帧耗时统计的
image
image

另外,你的例子里居然放了11000个图片,还能保持30帧,这就让我更迷茫了,因为我刚开始优化性能的时候发现帧耗时一大半都花在了/cocos/2d/renderer/batcher-2d.ts的walk里,里面装填各种buffer的操作非常的慢,我们的游戏里通过给节点额外一个标志来跳过这个函数才让帧耗时下来一点
public walk (node: Node, level = 0) {
if (node._keep_render)return
if (!node.activeInHierarchy) {
return;
}
const children = node.children;
const uiProps = node._uiProps;
const render = uiProps.uiComp as UIRenderer;
。。。。。。。。。

所以你的1万个节点,为什么帧耗时那么低
大佬能把你的测试工程发给我研究研究么

那个梗是老股民都懂的伤痛 :rofl:

换不起了,这个项目再做不好,回老家摆地摊去了

可以组队摆地摊嘛

我这个地摊有技术含量的 :rofl:image

苟富贵,莫相忘 :money_mouth_face: :money_mouth_face:

狗互跪,互相汪。汪汪汪汪汪~