就我感觉3.7.3预览加载变慢了吗?没3.7.2快了,早知道不更新了【手动狗头】

个人觉得这种问题,按道理,应该有一个3.7.4活着3.7.3-xxx 修复版才行,总不能要求每一个使用者都去合并 pr,而且也要考虑并不是所有人都知道如何操作。还有就是新用3.7.3的人,就直接蜗牛般的启动时长,人家就以为,这引擎,就这样,卡得要死。
如果不出3.7.4的话,我觉得官方对引擎的品控是真的有待提高,我觉得仅仅是这个问题,对使用者的影响是很大的,经常需要预览启动,浪费着每一个使用者的时间和耐心,官方却不计划出个小版本修复这个问题。
@jare
官方几个编辑器大佬搞比赛去了, 那不得还是要解决了质量品控问题么?基础的东西没做好,锦上添花的意义又有多大。提升外在固然也是提升,但是 cocos 这个内在,真的得好好提升一下才行了。
cocos 要思考如何打破现在这个循环:遇到 bug->升级版本->遇到新bug->升级版本->…
这次回归用 cocos 从3.5一路到3.7,我的有几点明显感受:
1.每一个版本,都不稳定,尤其是3.5根本没有达到做产品的品质。
2.每一个版本都解决上一个版本的问题,但是又引入新的问题,而很多问题,其实就是品控不严,测试不全导致的。比如3.5的音效内存泄露,3.6的 spine 闪退、3.6的图集精灵名字丢失,3.7的变更了第三方包的识别方式(目前没看到任何地方提到过),3.7的编辑器蜗牛预览等等。这些明显的问题,反应出来的是引擎品控环节的问题。
3.一些常用的组件,还存在着匪夷所思的 BUG 或者不合理的逻辑设计。比如:active=false 的精灵会打断合批;复用 spine 的 Skeleton,通过替换 data 的方式替换显示的内容,会导致各种怪异的错误,如果不报错,每一次替换 data,内存就会泄露一部分,除非Skeleton销毁;2d 的合批实现代码,关键逻辑之前提过,似乎少了索引长度的判断,导致某些情况下,渲染直接抛出越界错误,导致渲染中断;音效的 AudioSource 组件无法重复使用(切换音乐的时候,经常会出现,原来的音乐根本没停,2个音乐在播放,现在版本不确定是否还有问题)等等
4.对已释放的资源处理相当不友好,如果某个资源被释放了,但是还存在渲染组件用到,引擎就是单纯的各种空指针,如果我们想知道什么资源的问题,还得去自己打断点,设置条件,然后看上下文一个个去找,去猜。所以,引擎是出于什么原因(别说是效率,一个 if 分支而已,比起一些不合理的逻辑轻量多了),不能加一个资源已释放的 if 判断,并且输出资源 id,节省下使用者的时间呢?诸如此类的错误还有很多,明明可以把详细的错误信息输出一下,但是就不,就要使用者自己去慢慢找,是真不友好。

多余的也不吐槽了,既然在用,肯定是希望引擎越来越稳定,毕竟,谁也不想拿着一个不稳定的引擎去做自己用来生存的项目吧。

5赞

我这边用你的项目测试了一下
3.7.3修复后,编辑器预览和网页预览的速度都是差不多的。
同时也对比了3.7.2的预览,时间上也没有明显变化,我用的是game.scene测试的。

1赞

能不能出个修复版呢,这个问题100%影响所有3.7.3用户,不发修复版本,有点说不过去啊

3.7.0 开始,浏览器预览开头会有一个插屏的动画,你可以通过修改插屏事件,来减少开头的等待时间。我们后续会对该功能进行优化,避免用户在浏览器预览的时候需要等待插屏

image
是的,本来我们也是评估后准备发布 3.7.3-p.1 了,后来排查完发现 3.7.3 变慢的是编辑器预览而不是网页预览,暂时就不发补丁版本了。因为编辑器预览本身也是实验性功能,如果真要做到尽善尽美现在 bug 其实也不少,等这个功能将来更加成熟之后我们会重点进行测试的。
image

PS:我们现在没办法发现一个问题发一个版本,因为我们经过多年的规范,目前发版本的流程还是很长的:

  1. 申请测试资源、测试排期
  2. 打包自测,解决各种分支合并、同步、打包、签名、自动化测试问题
  3. 每一轮人工测一周,大版本通常要测 4 轮,小版本 1 - 2 轮
  4. 每一轮都会测出很多问题,需要研发进行梳理、复现、排期修复,
  5. 走上线流程,涉及到微信引擎插件、360 安全校验、包体校验、引擎性能校验、文档、官网、API 上线等环节

这样折腾下来,对各方面的影响还是很大的,也会影响大版本的进度。


是的,非常赞同。这么多年了,你们应该也能感受到我们是能意识到问题的。感谢对我们的批评,也欢迎继续吐槽。


人力去覆盖是永远不可能覆盖全面的,目前测试团队的人力配置已经和编辑器团队相当了,每个大版本都会花上一个月的时间进行人工 + 自动化测试。但是编辑器和引擎的用法千千万,好多 API 我们自己都不知道还能这么用,很多编辑器的用法测试团队也没掌握过。
我们现在能想到的就是尽可能提高自动化测试覆盖率,特别是引擎在所有平台上的自动化测试。但是自动化测试例的编写也是需要人工进行的,也只能事后补充,很难覆盖所有使用场景。这一点上我暂时没有想到更好的办法,欢迎向我提供建议。

其它问题我也一并转发给引擎同学了。再次感谢您的反馈。

2赞

好的,非常感谢,幸苦了 :speak_no_evil: :partying_face: :ok_hand:

感觉每次更新 必定都会遇到这个启动满的问题 你们留意下历史的贴

3.7版本真的好狗屎 好多问题让我超级难受 上下移动箭头我得拿放大镜来上班 双屏移动 里面的场景会跳 而且会修改我预质体的位置 我的妈啊这么明显的问题 只要拿来开发个小功能就能发现的问题 居然就发布了
无语死了。。。。

还有一个节点错乱的问题 只有打包到手机才会出现

3.7.3几个问题反馈 这几个问题一起看一下吧,第一个脚本全找不到的还是很致命的

确实很慢。有时还要重启编辑器才行。不然就启动超时了。编辑器预览虽然是实验性功能。还是希望做好。编辑器预览方便很多。

我们会发一个 3.7.4 来修复此问题

1赞

建议引入模糊测试和重视集成测试。单元测试的意义不大。我感觉还是测试环节不够规范,这几年看下来确实是很多问题未能测试出来

但是很多bug是在上一个或者上上个版本就已经存在了。在某个版本被修复,下个版本又出现.就非常奇怪了

我们测试环节比开发环节还规范,主要还是光靠人工测试无法穷举所有操作。当然也有不少问题是有测出来,但是没有得到修复,因为引擎的开发人力很有限……

1赞

确实靠人工无法穷举所有可能性,其实可以考虑多个组件之间组合后是否会出现bug,当然还存在上下层节点之间的组件增删改后是否可能出现bug等等的,其实工作量确实不少。单靠人工肯定是不足以穷举所有可能性的,我强烈建议你们内部写一个测试框架来实现我上面说的那些点,你应该懂我的意思,望越来越好和健壮

请问测试框架如何穷举所有可能性?框架本身如何知道什么结果是对的什么结果是错的?

比如sprite组件和button组件之间耦合比较紧密,更改sprite.spriteFrame后button也会做出相应的更改,用代码判断是否更改了,如果没更改,那就是panic,如果更改了,那就是测试通过。
再展开来讲:批量选中多个节点并赋值给这些节点中的共有组件的某个值,比如sprite中的spriteFrame,我记得在某个版本就是出现这个bug,并没有全部赋值,或者是全部赋值了,但是节点下的button的normal sprite却没有做出正确的改变,我只是抛砖引玉,其他组件之间的东西,其实这种测试框架是挺不好写的,但是并非写不出来,而且最重要的是这种测试框架一旦写出来则受益匪浅和永久性的。再说下模糊测试,模糊测试是最近几年的东西,是为了测试每一个函数的bug,这个你们应该有所耳闻。框架肯定是不知道什么结果是正确的,什么是错误的,这些都需要你们在测试时候用代码来自动打开编辑器,既然是集成测试,那肯定是模仿写代码时候的环境,肯定是需要打开你们的cocos编辑器的.然后每次编辑也是通过代码来修改,接着隔一定的时间判断编辑器是否做出了所预想的那种效果。。。等等。。

这种框架我们现在就有啊,问题是如何做到穷举所有 bug?

这个确实没法穷举所有,但目前来说其实不用穷举所有,能涵盖大部分情况都已经很不错了