我使用许多其他数据格式(xml、json、默认对象序列化、hessian、一种专有格式)和用于数据绑定任务(读取和写入)的库(jaxb、快速信息集、手写)测试了 PB 的性能,但不包括节俭的格式。具有多个转换器的格式(如 xml)的性能差异很大,从非常慢到非常快。作者的主张与感知绩效之间的相关性相当弱。尤其是对于那些提出最疯狂要求的包裹。
对于它的价值,我发现 PB 的性能被夸大了(通常不是它的作者,而是其他只知道谁写的人)。在默认设置下,它并没有击败最快的文本 xml 替代方案。使用优化模式(为什么这不是默认的?),它有点快,可以与最快的 JSON 包相媲美。Hessian 相当快,文本 json 也是。专有的二进制格式(这里没有名字,它是公司内部的)是最慢的。Java 对象序列化对于较大的消息来说速度很快,而对于小对象则不那么快(即,每次操作的高固定开销)。使用 PB 消息大小很紧凑,但考虑到您必须做的所有权衡(数据不是自我描述的:如果丢失模式,就会丢失数据;当然有索引和值类型,但从你所拥有的如果需要,可以对字段名称进行逆向工程),
我的观点是(a)实现通常比规范(数据格式)更重要,(b)端到端,最佳品种(不同格式)之间的差异通常不足以决定选择。也就是说,你最好选择你最喜欢使用的格式+API/lib/framework(或者有最好的工具支持),找到最好的实现,看看它是否足够快。如果(且仅当!)不是,请考虑下一个最佳选择。
附言。不确定这里的 EJB3 是什么。也许只是简单的 Java 序列化?