关于JSON,大家耳熟能详,不做多说,今天在这里分享一下关于JSON压缩的几点方案。
1.压缩Key
原始JSON(长度:79)
1 | { |
压缩Key以后(长度:57)
1 | { |
体积减小27.85%,对于高并发的服务而言,此数字相当可观!!!
那么,是不是所有的Restful都可以采用这种方案来进行压缩呢?答案是否定的。首先,Key压缩损失了JSON的可读性,这就要求必须事先进行约定,增加了出错的风险;其次,对于JSON中含有较长Value字段的,压缩效果不是很明显,可能得不偿失。
附:如果采用Jackson,那么对username的压缩实现为@JsonProperty(“a”)
2.省略Key
如果说方案1不解渴,那就来个更彻底的,直接省略掉Key!!!
原始JSON(长度:79)
1 | { |
省略Key以后(长度:37)
1 | [ |
体积减小53.16%,Oh,mygod!!!
当然缺点就是将对象转换成了数组,这就要求字段顺序必须有保证(这个不难,排序一下就好),并且对于0或者null字段也不可省略。
3.字典压缩
改进版的方案1,即:预先分析所有的字段,然后对字段名称进行编码(缩写),得到编码字典,之后的JSON生成和解析依赖于该字典,这样就可以进行高效的“压缩”和“解压”。此过程无需改动(侵入)现有代码,实现时,仅需对输入和输出进行过滤。
以上几种方案都是针对客户端为浏览器的情况下进行的改造,兼容性强,改动量都不是很大,却可以获得不错的性能提升。如果是服务与服务之间的通信,则完全可以替换掉JSON,比如Goole的Protobuf。