老版本Creator213 cc.loader.load加载Base64耗时

  • Creator 版本: 2.1.3 (总有一些项目需要这么老的版本 :sweat_smile:

  • 目标平台: Windows、Web、Chrome浏览器

  • 核心代码
    cc.loader.load({ url: this.base64DataUrl, type: “png” }, (err, texture: cc.Texture2D) => {})

  • 核心问题:
    使用cc.loader.load加载base64编码的图片数据时,在开发中使用浏览器预览时,加载完成耗时是正常的,但构建web(web-mobile/web-desktop)后运行起来,加载的时长明显慢了很多很多。

  • 对比测试:以cocos.png精灵图的base64数据加载为例
    Creator 245、246、249 构建web-mobile后与开发中预览均正常,耗时基本一致0.008s;
    Creator 232 打包后明显更耗时 开发时预览耗时0.011s,构建web-mobile后耗时2.273s;
    Creator 213 打包后明显更耗时 开发时预览耗时0.005s,构建web-mobile后耗时2.263s;

  • 如上,针对2.1.3应该如何破解这个构建后加载base64的耗时问题呢
    希望各路大神指点迷津

  • 完整Demo Test_LoadBase64Data_CCC213.zip (272.8 KB)

@huanxinyin 大佬能帮忙看下吗

@huanxinyin 大佬能看看吗,给点建议也好

找到问题了:
CocosCreator2.1.3\resources\engine\cocos2d\core\load-pipeline\subpackage-pipe.js中
function getUuidFromURL(url) {
// fix start
if (!url) {
return “”;
}
// 对base64的url不做正则匹配
if (url.startsWith(“data:image/png;base64,”) || url.startsWith(“data:image/jpg;base64,”)) {
console.log(“getUuidFromURL bugfixed”);
return url;
}
// fix end
// 耗时原因在这儿
var matches = url.match(UuidRegex);
if (matches) {
return matches[1];
}
return “”;
}

CocosCreator2.1.3\resources\engine\cocos2d\core\load-pipeline\md5-pipe.js中MD5Pipe.prototype.transformURL也做同理处理

最后再编译下引擎即可:
https://docs.cocos.com/creator/2.1/manual/zh/advanced-topics/engine-customization.html