关于SpriteAtlas的效率问题?

编辑器是最新的Creator 2.3.3。
我这儿有几百个图标,用TexturePacker打包成一个图集。然后用下面代码加载这个图集:

let t = Date.now();
cc.loader.loadRes("ui/textures/icon18", cc.SpriteAtlas, (err, atlas) => {
	console.log(">>>>>", Date.now() -t);
});

发现竟然需要差不多2秒才能加载出来。如果我把cc.SpriteAtlas换成cc.Texture2D加载,则只需要100毫秒。
请问这是什么原因呢?

我自己猜测是每个SpriteFrame都关联一个json文件,当加载SpriteAtlas的时候,同时要去下载几百个json文件,导致很慢。请问这个有办法比较好的优化吗?

@jare @panda

有可能是这个原因,几百个图标的话,确实 atlas 关联的 json 会比较多,但是只要 json 有合并应该是不会那么慢。当然,Texture2D 和 SpriteAtlas 的资源量仍然是不对等的,Texture2D 的资源简单很多。需要确认打包后的 SpriteFrame 对应的 json 是不是没有被正常合并,以及没有被合并的原因是什么

@EndEvil @Knox

我没有在打包后测试,可能合并后会好一点点。不过问题在于,我在用1.9版本的时候,似乎没有遇到这个问题,加载也挺快的。换到2.3.3之后,动态加裁这种很大的图集时,能很明显感觉到要卡一会儿才加载出来。

原生上构建的时候有个这个选项,勾上应该就能合并了

这块应该没有调整过

2.4.1 开始,如果是合并后的 json,包体会进一步减小,加载性能会进一步提升

好的,我自己优化过一遍,现在这种动态加载的图标,可以做到200ms加载完一个大图集了。

大神,请问一下是如何优化的呢

请问是如何优化的

大概思路是。。。。等我们后面空了,会写一点的:)

mark,等大神