找回密码
 立即注册
首页 业界区 科技 H5游戏性能优化系列-----协议相关优化

H5游戏性能优化系列-----协议相关优化

椎蕊 昨天 22:07
H5通讯协议这一块儿最长将的搭配应该是WebSocket+Protobuf这种模式吧,本篇就聊一下protobuf相关的优化。
Protobuf基本流程

  • 导入protobuf库
  • 一般是后端定义协议文件,xxx.proto
  • 现在的引擎都是要求写Ts文件的,所以要生成协议类的.d.ts,这样写协议处理时才有代码提示
  • 直接加载proto文件,然后用protobuf库动态生成消息类在内存中, 或者直接用pbjs等命令生成协议类的js代码
 
Protobuf的一些问题
在一些小游戏平台,比如微信小游戏平台,protobuf是不能直接加载proto文件然后动态生成协议类的,必须要将proto文件生成出对应的协议类js文件,这在proto协议比较少的时候,问题不是很明显,如果有成千上万个协议消息,生成的js会很大,进游戏的时候就必须要多加载这部分的js代码。
解决方法有以下几点:

  • 协议定义的复用,比如各种消耗, costType, costNum, 可以定义成公用的,在其他协议类需要用到时直接引用这个公用的类型。
  • pb生成的协议类js中,我们通过参数控制,只生成必要的函数即可。比如一个消息类,明确知道只会出现在前端发送给后端的过程中,那么生成这个协议的类中,只需要出现encode编码函数即可,因为前端不需要解码,同样对于明确知道是服务器返回的协议类型,只需要出现decode函数即可,不需要encode函数。
  • 为什么在小游戏平台用不了动态加载proto这种形式,最终原因是protobuf的库中使用了eval或者new Function这种小游戏平台不支持的方式,花点时间魔改protobuf库,将用string生成函数的相关代码改成直接返回对应函数,截取一部分修改示意:
1.png

   4. 如果觉得改protobuf的js库麻烦又怕改了之后出bug,但是又不想生成协议类的硬代码,可以选择不用protobuf,  选择其他同时兼容web和微信小游戏的协议框架, 或者直接使用json结构,加上msgpack或者zlib压缩成二进制?
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册