【福利】编译项目生成过多json文件加载慢的民间解决方案

先看看问题:

res/import/底下有很多json文件,每个prefab、spriteframe、scene等等都会生成一个json文件,加载场景的时候会将这些asset json文件下载完毕后你的场景才能出来,巨慢无比;

简单解决思路:

将这些json文件内容合并,然后将合并后的内容预置到main.js中,修改cocos源码,判断如果请求的是asset json则从预置的main.js中读取出来,避免网络请求;

1、

我们需要修改main.js和cocos2d-js-min.js这两个文件;

2、将生成的所有json文件内容合并成一个大的json object,格式:{“json1文件名”:“json1文件内容”, “json2文件名”:“json2文件内容” …}

MergeCreatorJSON.app.zip (1.8 MB)

我做了一个工具(只有OSX版),用来读取json并生成大的json object:

3、copy出工具生成的json文件内容,放到main.js中:

4、然后在 main.js里加上很挫的几行代码:

window.inner_downloadText = function (item, callback) {

if (item.type === "uuid") {
   if (jsonObj[item.uuid]) {
      callback(null, jsonObj[item.uuid]);
   } else if (jsonObj[item.id]) {
      callback(null, jsonObj[item.id]);
   }  
   
  return true;

}

return false;

};

放在这里:

5、修改 cocos2d-js-min.js文件,找到 第20行,第2833列,插入很挫的代码:
if(window.inner_downloadText(t,e)) {return;};

如果你嫌麻烦,我把我修改好的cocos2d-js-min.js放上来了:
cocos2d-js-min.js.zip (254.6 KB)

6、搞定

7、注意事项:
稍微麻烦的地方:只要你在creator中修改了界面、元素、添加了图片等等,会导致asset json文件改变,你都需要从第二步开始,重新合并json、替换main.js中的大json串;

完毕

13赞

谢谢,我上个web项目也是,一下子加载600多个json然后被骂说io消耗太大导致加载很慢,虽然最终一个个素材优化打包最终把数量控制在300个,但依然很多,以后项目都可能没法用creator了,希望官方能正视这个问题

官方是已经在解决这个问题了,给官方多一些时间,咱们民间多奉献些小力量:grinning:

1赞

:+1:赞!
有实际执行效果的demo吗~~

在解决就行,咱不怕等,就怕遇到问题被无视,老板看的是最终效果,不会管你用的是什么,自己解决也不是不可以,但每次都要重新手动整合一次就有点麻烦了,windows版本还得自己写

MergeCreatorJSON.zip (115.3 KB)

附上源码。swift源码,OSX版APP。

ccc Json合并工具.zip (784.2 KB)

感谢楼主的思路。这是一键实现的工具,包括源代码。

4赞

有没有win版的合并Json·····

额, 你楼上就是啊,程序都给你贴出来了:joy:

闪了一下就没了没效果啊

你试了呗 能用么?

就是闪了一下就好了,我看了下,好像是把所有json合并到一个json文件,但是有没有效果我也没测试:grin:

主要我闪一下没好啊····main里面没变不知道合并到哪个位置了

另一个项目成了 这什么鬼 = =···

啥意思?(补丁)

明白了 不能有程序占用 我编辑着当前这个项目 点了不管用 关了以后就行了 = =

速度简直飞起来 - - 之前卡一分钟现在秒进·····

是不是感觉爽爽哒?

确实啊 实在差太多了 早该把这个合并进来 = =····

真是业界良心,赞啊。