请教 3.8 游戏bundle是打包成zip文件还是二进制文件那个比较好

目前使用的引擎是3.8
现在手头的项目,bundle包是放在服务器上,按需加载的,但是里面文件不可避免的会很多个,所以我打算将bundle打包成一个文件,提高一下下载速度,再看看引擎里面是不是能通过什么方式,添加到游戏引擎的资源管理器。
所以我想问
1,我这个思路有没有问题,会不会多此一举
2,zip好还是二进制好,我个人觉得二进制更好,因为zip是需要解压的,需要额外的内存空间,二进制文件貌似定好结构之后能直接读取,但是二进制文件好像会比较大吧,毕竟没压缩。
3,现在我有一点不太确定,就是我自己有二进制文件,也可以根据定的规则,分出了文件类型,但是我不确定cocos 有没有方法将我的二进制数据,转为合适的资源对象,主要担心这部分是不是内部方法,

菜鸟提问 请各位大佬不吝赐教2EC876F9

小透明无人理会瑟瑟发抖,

说下这几天我干了什么,
需求说明,我需要远程加载一下bundle,然后发现文件还是有点多,所以我想着,能不能把文件打包成一个文件,然后在引擎里解压出来,这样的话,请求就变少了,速度不就上去了,

我花了两天,在@我的小狗叫奶茶 大佬的压缩工具基础上,用node简单加了个功能,将所有资源文件打包成一个二进制文件,
大佬贴子:https://forum.cocos.org/t/topic/138234

image
大致的逻辑是
[描述文件长度,描述文件内容,资源文件内容]
前面固定4字节,保存后面描述文件的长度,
描述文件内容见下图,保存了资源文件的一些说明,包括路径,后缀名,内容长度,
image

对了,我用的引擎是 cocosCraete3.8
目前按照我定义的数据结构,已经将数据分离出来了,
然后就开始愉快的踩坑之路
尝试1
我看了引擎内部的资源加载管线,
首先创建bundle,直接调用 factory.create(…)就可以创建,记得往config的json里加一句base:assets/${bundleName},${bundleName}是你的bundle名字
image
接下来下其他文件,我就傻了
image
官方是通过这个管线下载资源,preprocess 预处理,load是下载
在load 处理函数里 有这么一段,他是将RequestItem 传入单个下载管道去下载资源,
image
然后 loadOneAssetPipeline 有两个部分
image
fetch函数里,有这么一个东西,
image
然后我睿智的想出了一个方法,我将管线复制出来一条,然后在插入一个函数,将file的值填入不就好了吗,这样就可以不经过下载方法,直接走后面的解析函数,大致应该是这么写
image
然后就gg,走不下去了,不知道为什么,对比直接加远程bundle,这里的RequestItem数量就是对不上,查不到原因,冷静一下之后,决定重新换个思路
尝试2
我开始思考为什么我要死磕加载管线呢,我只要不让引擎去下载,跳过下载过程,直接拿到数据,不也是成功嘛,然后我看到了这个,所有下载基本都是走这里,经过某个函数,改变请求头啥的,然后走http请求下载,
image
image
刚好我看到一个函数,能自定义处理方法
image
哦吼,那只要我重载一下这个方法,如果url在我外面定义的缓存里能找到,我就直接返回不就可以了嘛。
image
image

然后我就遇到了两个坑,出不来了,
1 提示我反序列化失败 Can not deserialize the same JSON data again.
image
不知道为什么会出现
2,另一个导致我放弃的原因是 音频 视频,字体文件,这几种资源,很多无法通过重载某个函数就是实现功能,所以我只能先放弃
image

尝试3
上面已经调试,看源码,搞了好几天,国庆都过完了,还没成功,懵归懵,我还是要继续弄的
在2的基础上继续改,原来的函数我不能重载,这个时候,我只能考虑函数替换一下
image
首先在引擎源码里加一个函数 image
我只想获取原来的处理函数,但是官方没有提供,所以只能自己加一个,
然后将我自己解析出来的数据,通过URL.createObjectURL(file.contentBlob);转为浏览器的资源映射地址,
再给丢给引擎去下载,这个方法经过我简单测试,能正常加载bundle了,

但是 只要下载就要时间呀,去下载blob的内容也是需要时间的 image
那我优化,优化了个寂寞啊,
写这文的时候,孩子已经哭晕在厕所。

论坛的大佬们,路过给个意见,官方大大,求指点啊,总不能看着孩子一直在撞南墙吧

除非改底层,引擎很多东西hook不了,我也想过这个问题。感觉很难。
想办法把各种资源解析的接口支持二进制

这个bundle打包还是挺必要的,我觉得官方还是要支持一下,对bundle分的比较细的项目用处很大。
其实官方应该支持打zip了。你可以把bundle的平台选到wechatgame,就会发现compress type里面多出一个zip选项。但只有wechatgame一个平台支持。其实我觉得可以在全平台支持这个功能,你可以看看官方的wechatgame的zip是怎么实现的,是不是可以借鉴一下。