cocos / cocos-engine

Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-performance, engaging 2D/3D games and instant web entertainment.
https://www.cocos.com/en/creator
Other
8.21k stars 1.94k forks source link

[性能优化] 希望将 `batcher-2d.ts`文件中的 `walk` 方法改为非递归. #17085

Open finscn opened 5 months ago

finscn commented 5 months ago

Use Case

目前 batcher-2d.ts 的 walk 方法已经成为我们项目的性能热点之一 (游戏比较特殊, 同屏元素多 且层级深)

image

看了下 walk 的实现, 它并不是尾递归, 难以被js引擎自动优化, 希望能 人工优化为 非递归.

https://github.com/cocos/cocos-engine/blob/v3.8.5/cocos/2d/renderer/batcher-2d.ts#L825

Problem Description

(如上所述)

Proposed Solution

No response

How it works

No response

Alternatives Considered

Additional Information

No response

finscn commented 5 months ago

顺便 再次吐槽下 你们的 eslint . 以前 我是非常原因给 cocos提交pr 的, 但是道了 3.x 时代, 真的是不想碰你们的代码. vscode打开 各种标红, 各种eslint错误. 还有很多更可怕的 xxx | null , null! . 而且 xxx | null , xxx | undefined, xxx | null | undefined 混着用, 顺序也各种随意 , 而且有的有空格有的没空格....

你们什么时候能完善下你们的eslint (以及tsconfig) 呢?

这事你们迟迟不做, 是因为现在改eslint, 并修正已有代码的报错, 对代码改动太大? 大了又如何呢? 怕影响使用自定义引擎的人? 我觉得首先 这类人不多, 其次 这类人都是高手 高手能应对 eslint的改变带来的问题.

磨刀不误砍柴工, 你们越是人手不足 越是人员能力层次不齐, 越需要eslint.

希望能好好考虑考虑.

minggo commented 5 months ago

eslint 的问题主要是一下子太多没法全部改过来,在遇到的过程中一点点改。另外,我之前看到你有提过 tsconfig 的配置修改。我看一下修改太多。最好是一次改一点,针对每点都讨论清楚为什么这么改。这样比较容易推进。

finscn commented 4 months ago
image image image

@minggo walk为什么那么耗时? 以及 似乎 wasm版本的spine 并没有提升多少性能. wasm可能确实快了些, 但是它和js之间的通讯也是耗时的, 可能提升的性能没法弥补通讯的消耗.

finscn commented 4 months ago

@minggo spine的wasm库是不是没用共享内存啊? 如果用了 还是这么慢 那真的难以接受了.
强烈要求提供使用 ts版本的spine runtime的能力. ts版本至少更方便hack和优化.

finscn commented 4 months ago

查了下 小游戏平台的wasm是不支持共享内存的... 那真的太可怕了. 再次强烈要求 让开发者可以选择 ts版本的 spine runtime.

finscn commented 1 month ago
image

这个是真机上小游戏的cpu profiler , walk 耗费时间特别多. @minggo , 这个改为非递归会好一些吗? (我们项目中上万个node , 分很多层级)

minggo commented 1 month ago

这个我们研究下