在web开发的前后端通信中,json还是占了大部分比重的。他本身是一个很好的数据结构,但是当数据量增大以后,前后端在格式化的时候会耗费很多时间。
json优化
大部分系统为了统一通讯方式基本还都是使用json,而且前后端通讯数据也不是很大,控制在几字节之内,但是当通讯数据量过了1M以后性能问题就会出现。为了解决这种问题,在代码端可以做一些力所能及的优化,比如下面这链接里的tips
- Don’t serialize all fields, null or default values
Check your JSON library settings to see how you can ignore specific fields, omit null values, etc. ……吧啦吧啦- Use shorter field names
Most libraries enable you to specify attributes on your classes to override the names of the fields as they are being serialized. This can ……吧啦吧啦
其实你可以看到,这两条的思想就是尽可能的缩短你的json长度。
在golang的代码里你可以使用omitempty不去显示为空或者为默认值的字段。
在实际情况中经常会用到,比如说我定义了一个返回参数的结构体,但是我这一个结构体是两三个接口通用的,在不同情况下我可能只返回结构体的部分字段,这个时候我在定义的时候就可以在tag中加入omitempty。
type CustomerResponse struct{
Id int64 `json:"id"`
Name string `json:"name"`
Phone string `json:"phone,omitempty"`
}
我在不赋值phone字段的时候返回json里就不会出现他,另外补充的一点就是,golang的string型和int型都没有null值,所以说当int为0,string为""的时候(默认值)的时候都不会去序列化这些变量。
protobuf
当通讯数据量再增长,从1M增长到10M了,json的性能问题就更为凸显,所以为了在一定量级的数量上有更好的表现,我们还是倾向于protobuf。
protobuf是…… 自己查吧,总之比json快很多。
。。。更新