生成的protobufjs文件太大,分包无法引用的问题

背景:
2.4.11版本
通过protobufjs生产了对应的proto.js和.d.ts文件,业务代码里可以直接用里面的数据结构。

但是因为业务的协议很多,生成的js文件很大,没压缩之前达到20m,压缩之后是6m,肯定不能放在主包,所以做了分包proto。

因为游戏业务逻辑也很多,代码同样做了分包,比如数据model分包,其中会依赖引用proto包。

逻辑上在加载model包之前,先加载了proto包

问题来了
在编辑器、微信开发者工具上,运行一切正常。

但是开发版、体验版,在我的IOS手机上一直报错:

在model层cannot find module “proto”

安卓机器上还没有测试过

疑问:
1、是不是分包之间不能互相引用、调用代码?

2、如果proto不生成js,而是生成json文件放在资源里,在运行时通过protobufjs.Root.fromJSON动态加载,这样包体大小可以保证,但是业务开发是不是就不方便了,需要把proto协议里面的字段名都要自己定义一遍接口?

写工具生成d.ts
我们目前就是这么做的。我们用了grpc还直接把网络rpc接口代码自动生成。

这么大? 小游戏 那就不要用这个就是了,又不是没这个东西就不行了

proto 你不做强依赖也行啊,就跟二楼说的,你生成.d.ts,主题对象挂window上,把代码生成完调就完了,
要分包你就确保分包优先级比应用代码高就行
甚至你还可以把proto.js代码单独拿出来做版本热更都行,反正下载了文本都是字符串直接parse都可以

1赞

怎么使用有例子吗?

以虚心学习的态度问一下 有什么功能 不用protobuf就不能实现的了吗是?

哈哈哈哈哈

不是能不能实现的问题。protobuf 数据量小,便于传输。你传输数据你用 100ms,人家只要用 10ms。这种差距只有在边界的时候才能体会到。

没用过不懂 你说的100ms 10ms,是指时间吗? 那能给科普一下 为什么protobuf 能缩短网络传输时间的? 这个还真想学学

想学就自己百度

虚心学习 这里有没有高手 给指点一下 什么库能够缩短网络时间传输的?

真的假的 我怀疑你在钓鱼

不太懂 看到这个论坛里用protobuf 还有些人 但身边没有人用 , 所以想知道用这个的原因只是,但有人说能省传输时间 这个挺好奇 很伟大的库啊 虽然不知道原理 但有点打破我之前的某些认知了 就想学习新东西,找了这个论坛相关的文章 也没有谁能给出一个比较好理由还
用一个库 真的没有一个理由吗? 这不是更奇怪了吗
或者有理由 就是不想告诉我这种水平低的? 到底是什么原因

用prorobuf比用json传输的数据小,比如,你要发送{“name”:“111”},protobuf文件只需要发送[10,5,49,49,49,58,48],服务器上系列化和客户端反系列化都会比较快。

嗯,google弄出个protobuf就是有病,垃圾公司。

想要小还不简单吗 ArrayBuffer看到这个了吗 原生自带的 不比protobuf 成熟稳定?还简单易用
小这个理由在20年前 网络带宽很有限的情况下 还是个理由,现在很少有人提到这个了都

。。你能自定义个协议,肯定是最好的,但是定协议,得考虑很多方面的问题,比如版本升级后协议兼容性,数据嵌套啥的,协议中的各种数组再嵌套对象,对象里面嵌套对象。有轮子为啥不用呢。。非得自己去造个轮子。。

你做的是小游戏么, 小游戏包体这么大不行的, 小游戏最重要的是启动快,所以包体要绝对的小。 为了消息协议省那几个字节 居然包体大了那么多M,简直是丢了西瓜捡了个芝麻。 另外现在都是5g,消息省掉的那几个字节慢不了多少

我很想听到有人能给出一个让其他人很难拒绝使用它的理由 到现在还没有 当然可能后面会有高人补充的 我继续学习, 就目前的我只看到两个理由 传输快 这个有点超出我的认知 我没法说希望高人给个说明,
然后是数据小 这个理由太没有吸引力了 首先当前网络状况 这个完全可以忽略了,2000年前还差不多,就像是2000年前 那时候还有人关心服务器硬件的速度的,生怕硬件的运行速度不够 影响软件的运行,现在谁还在意这个,我已经有十年没听到有人提起网络包大一个字节小一个字节的影响了,因为这个再导入一个库 带来的问题 我不太理解 带来这个的价值有多大

你说ArrayBuffer显得很奇怪,谁不知道最后数据都会序列化成arraybuffer然后再传输的?
你能说说你用的什么格式传输数据么?它有多丰富的定义格式的规则?兼容性如何?解析速度如何?你不会说,数据格式都在本地,服务端传过来个唯一id作为信号,本地map一下就够了吧?