H5游戏性能优化系列-----协议相关优化
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生成函数的相关代码改成直接返回对应函数,截取一部分修改示意:

4. 如果觉得改protobuf的js库麻烦又怕改了之后出bug,但是又不想生成协议类的硬代码,可以选择不用protobuf, 选择其他同时兼容web和微信小游戏的协议框架, 或者直接使用json结构,加上msgpack或者zlib压缩成二进制?
H5游戏性能优化系列-----协议相关优化的更多相关文章
- [MySQL性能优化系列]LIMIT语句优化
1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...
- Mysql优化系列之数据类型优化
本篇是优化系列的第一篇:数据类型 为了不产生赘述,尽量用简洁的语言来描述. 在选择数据类型之前,首先要知道几个原则: 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型意味着更快, ...
- Android性能优化系列之电量优化
电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情,随着Android开的性能要求越来越高,电量的优化,也显得格外重要,一个耗电的应用,用户肯定会毫不犹豫的进行卸载,所 ...
- PLSQL_性能优化系列04_Oracle Optimizer优化器
2014-09-25 Created By BaoXinjian
- Android优化系列之ListView优化老生常谈
本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么 ...
- ElasticSearch优化系列七:优化建议
尽量运行在Sun/Oracle JDK1.7以上环境中,低版本的jdk容易出现莫名的bug,ES性能体现在在分布式计算中,一个节点是不足以测试出其性能,一个生产系统至少在三个节点以上. ES集群节点规 ...
- Android性能优化系列之App启动优化
Android性能优化系列之布局优化 Android性能优化系列之内存优化 Android性能优化系列之apk瘦身 应用的启动速度缓慢是我们在开发过程中常常会遇到的问题,比方启动缓慢导致的黑屏.白屏问 ...
- Android性能优化系列之apk瘦身
Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...
- 推荐:Java性能优化系列集锦
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
随机推荐
- AI应用实战课学习总结(10)用CNN做图像分类
大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第10站,一起了解CNN卷积神经网络 以及 通过CNN做图像分类任务的案 ...
- 记录一次Armbian安装宝塔面板遇到ModuleNotFoundError: No module named '_sqlite3'的问题
如果在用Armbian安装宝塔面板的时候遇到ModuleNotFoundError: No module named '_sqlite3'报错,并且无法进入web面板界面,可以尝试以下操作. 报错界面 ...
- 在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算
https://www.bejson.com/convert/filesize/ 在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算 在线文件大小转换,bit,bytes,KB,MB, ...
- NOIP2024 游记
没有时间为 CSP2024 哀悼了,随即到达战场的是 NOIP2024! 2024.11.24 听从 cy 的谆谆教诲,一场模拟赛没打,直接摆烂. 2024.11.29 明天怎么复赛了?!? 摆烂到底 ...
- 国密算法简介与实现(转载_记录_Java)
国密算法简介 前言 加密是通过"加密算法"将明文加密成密文,可以通过"密钥"和"解密算法"将密文还原成明文. 密码学中应用最为广泛的三类算法 ...
- API 网关在iPaaS集成平台中的功能具体体现
前言 在数字化转型的浪潮中,企业纷纷加快转型步伐,应用程序与服务的集成需求呈现快速增长的趋势.然而,如何高效整合分散的资源,实现系统间的无缝协作,成为企业亟待解决的关键问题.API网关作为集成平台的核 ...
- MySQL数据迁移到SQLServer数据库
随着云计算技术的发展以及大数据时代的到来,越来越多的企业开始寻求更加高效.安全的数据管理解决方案.MySQL作为一种开源的关系型数据库管理系统,在互联网应用开发中占据了极其重要的位置:而另一方面,Mi ...
- iPaaS集成系统,统一管理企业API
RestCloud iPaaS是一个集成平台,一个集成系统,也是一套可全面解决企业面临的以目前传统集成技术无法突破的难点的集成方案产品.RestCloud新一代的混合集成平台,以API为中心,基于微服 ...
- Strawberry、Graphene还是Ariadne:谁才是FastAPI中GraphQL的最佳拍档?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 基本概念与选型标准 GraphQ ...
- ICEE-Microchip-MPLAB® X IDE-Microchip-MPLAB-Harmony extension + MHC(**Harmony Configurator)
Microchip-MPLAB-Harmony: Developer Sources: https://microchipdeveloper.com/xwiki/bin/view/software-t ...