热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

协议缓冲区如何比XML和JSON更快?

如何解决《协议缓冲区如何比XML和JSON更快?》经验,为你挑选了1个好方法。

我最近开始在工作中阅读和使用gRPC.gRPC在内部使用协议缓冲区作为其IDL,我随时随地读取协议缓冲区执行得更好,尤其是与JSON和XML相比更快.

我不明白的是 - 他们是怎么做到的?与XML和JSON相比,协议缓冲区中的哪些设计实际上使它们的执行速度更快?



1> Marc Gravell..:

数据的字符串表示:

需要文本编码/解码(这可能很便宜,但仍然是一个额外的步骤)

需要复杂的解析代码,特别是如果有人类友好的规则,如"必须允许空格"

通常涉及更多的带宽 - 因此更多的实际有效负载流失 - 由于嵌入诸如名称之类的东西,并且(再次)必须处理人性化的表示(例如,如何标记语法)

通常需要许多用于成员查找等的中间字符串实例

基于文本和基于二进制的序列化器都可以快速有效(或者速度慢且可怕)......只是:二进制序列化器的优势在于其优势.这意味着"好"二进制序列化器通常比"好"基于文本的序列化器更快.

让我们比较一个整数的基本例子:

JSON:

{"id":42}

如果我们假设ASCII或UTF-8编码并且没有空格,则为9个字节.

XML:

42

如果我们假设ASCII或UTF-8编码并且没有空格,则为11个字节 - 并且没有像命名空间那样的命名空间噪声.

protobuf的:

0x08 0x2a

2个字节

现在想象一下编写一个通用的xml或json解析器,以及你需要在文本层处理的所有歧义和场景,然后你需要将文本标记映射"id"到一个成员,然后你需要做一个整数解析"42".在protobuf中,有效负载较小,加上数学很简单,成员查找是一个整数(因此:适合非常快switch/跳).


顺便说一句:万一有人不确定'0x08 0x2a'是否代表相同的情况:https://protogen.marcgravell.com/decode?hex=082a
推荐阅读
  • 学习gRPC1.工作原理是什么
    什么是gRPCgRPC已经成为实现需要大规模快速运行的分布式软件系统的一项重要技术。简而言之,gRPC是一个API框架,它允许一个程序在互联网上的一个位置传递数据到另一个位置的另一 ... [详细]
  • golang基础-protobuf使用,Go语言社区,Golang程序员人脉社 ... [详细]
  • protobuf 安装_protobuf详解
    protobuf详解一、什么是protobufprotobuf全称GoogleProtocolBuffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具 ... [详细]
  • gRPC框架学习:2、ProtocolBuffers学习文章目录gRPC框架学习:2、ProtocolBuffers学习1.前言2.定义消息类型(1). ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 验证识别之你讲武德了吗?
    说说那个试用版的打包软件,既然是试用版肯定要加个试用期限,但是里面的pb模型并没有放识别率最好的那个,而是放了一个识别率中等 ... [详细]
  • 一、问题背景爬虫采集来的文件名中含有emoji以及全角半角符号,但是采集时并没有处理,原封不动存储到了数据中。现在有个需求,从数据库中取出数据,发送跟客户端,客户端拿这文件名写入到 ... [详细]
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • k8s入坑之路(14)scheduler调度 kubelet管理及健康检查
    kubelet主要功能Pod管理在kubernetes的设计中,最基本的管理单位是pod,而不是container。pod是kubernetes在容器上的一层封装,由一组运行在同一 ... [详细]
  • 分布式服务框架和原理简章
    应用架构演进这里的架构演进应该是从服务化的角度来说,应该说随着业务发展,应用规模扩大,系统的一些公共服务就会抽取出来,独立开发,部署,维护,用来解决并发,扩展,维护的问题。传统垂直 ... [详细]
  • ETCD介绍—etcd概念及原理方面分析
    etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点。简单:基于HTTPJS ... [详细]
  • 可能会|人类_程序员架构修炼之道:如何设计“易理解”的系统架构?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了程序员架构修炼之道:如何设计“易理解”的系统架构?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • https:github.comprotocolbuffersprotobufreleases报错:Pleasespecifyeither:•ago_packag ... [详细]
author-avatar
mobiledu2502929447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有