使用Cocos Studio的升级到3.17.1时注意SpriteFrameCache的坑

最近在把以前老项目从3.4升级到3.17.1,以前很多UI界面都是Cocos Studio搭建的,升级后虽然都能正常加载显示,但发现加载时间性能堪忧,一个游戏主场景csb加载时间在PC上就需要2秒多,而原来只要0.4秒不到:12:

最后加上日志打印分析,瓶颈锁定在于CSLoader::nodeWithFlatBuffersFile中这行代码:
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(textures->Get(i)->c_str());
SpriteFrameCache对比旧版分析了下,发现在3.17.1起,_loadedFileNames属性去掉了,然而原addSpriteFramesWithFile函数中只解析一次plist的判断也被去掉了,一个csb里边若用到70张图片,则会重复解析70次plist,导致性能直线下降

解决方案,原addSpriteFramesWithFile函数_loadedFileNames功能已改由_spriteFramesCache实现
ValueMap dict = FileUtils::getInstance()->getValueMapFromFile(fullPath);
这句代码之前添加以下判断(参考旧版代码实现)
if (!_spriteFramesCache.isPlistUsed(plist)) {

其实手写代码若多次调用该函数也是重复解析plist影响性能,只是这点在使用studio编辑器的特别明显,不知引擎组是基于缓存刷新考虑去掉的,还是其它原因,也希望后面升级的人不要踩坑在此分享下:2:

2赞