一直有个疑问,官方为啥就死犟眼子不加原生同步加载资源的API呢?

论坛随便搜搜同步加载资源就一大堆帖子,然后官方就是说我要做的和web一样,就是不加,就是觉得没用
没用能这么多人发帖吗~
人家node,unity,都提供了同步加载和异步加载的API,咋到了cocos这就觉得没用呢…

而且看之前的帖子,原生端其实就是同步加载,只是给故意做成异步了…有没有大神研究下,改下引擎能支持同步的…

现在的 await 不够好用吗?写起来跟同步一样不是

需求是这样的:
有个项目,需要做性能优化
里面很多的prefab为了不用异步加载, 所以直接挂到Prefab上, 然后统一加载这个prefab,这样使用的时候直接instantiate上边挂的就好了
开始的时候还好,项目大起来,这个Prefab的加载速度就接受不了了,所以要拆,然而…
然后试了下改成await异步加载,好家伙,每一个instantiate外边有几十层的调用,每一层的调用又被几十个地方几十层调用~~
每层都加await没可能的~~~一定会漏

现在只能把这个大prefab,拆成几个小prefab分段加载了:joy:,在后台偷偷加

await在 微信android平台执行微任务的顺序有问题,任何一个简单的加载都可能是3秒以后的事情了。

被这种方式雷到了, 你们公司没有一个厉害点的技术吗

异步本身不保证顺序, 你若想要顺序
顺序的写法:
await promise1;
await promise2;
await promise3;
无序的写法:
await Promise.all([promise1, promise2, promise3, …])

拆分复杂的prefab成多个,然后再分帧动态加载其实挺合理的而且也是常见的优化手段

我说的是微任务与宏任务的调用时机,不是promise的执行顺序

这个问题我们修复过,你升级到最新版试试。还是不行的话给个 demo 吧

我用的是2.4.10 我自己改引擎解决了

看场景,多大算大,不要低估引擎底层性能,默认会开jitCompile。
即使这样,就算有一个大页面拆分成多个页面,加载资源和实例化是个问题么。
cc.assetManager.resources.loadDir(‘你的大页面目录’, cc.Prefab, (err, prefabs) => {
if (err) {
console.error(err);
return;
}

// 在这里实例化 Prefab 并组成大页面
});

我们是2.4.5版本, 也是自己修了

没毛病。 我提一点, 其实await 写的多了代码一点也不优雅,为了防止出bug, 一般await语句后面需要加cc.isValid(this)。

:rofl:真实

大哥,老九没毛病

手动点赞~

你这不矛盾吗?要优化性能,还不用异步,你这种情况是依赖关系就不合理,竟然预制体之间还要有先后顺序,后面再加新的需求,你的加载时间还是要逐渐增加的