+ -
当前位置:首页 → 问答吧 → 关于JSON数据传输效率的一点看法

关于JSON数据传输效率的一点看法

时间:2010-04-15

来源:互联网

通过JSON返回的服务器数据的一般表现形式:
{ records:3,
  page:1,
  pagesize:20,
  searchstr:"J",
  datas:[
  {sid:"41",sname:"Jacky",score:"79"},
  {sid:"46",sname:"Jannie",score:"90"},
  {sid:"87",sname:"Johnson",score:"56"}]
}

这个形式有个好处,调用数据可以直接引用字段名,但是有个缺陷就是明显浪费带宽,因为储存了大量的重复字段名称。

因此认为可以改进:

{ records:3,
  page:1,
  pagesize:20,
  searchstr:"J",
  fields:["sid","sname","score"]
  datas:[
  ["41","Jacky","79"],
  ["46","Jannie","90"],
  ["87","Johnson","56"]]
}


各位认为哪种方法比较好?

作者: iscandy   发布时间: 2010-04-15

我个人还是支持上面的写法。这样取值是超级无敌方便的了。
这个比起用XML来传输数据并解析数据,已经节约很多很多的带宽了。
我们做项目时候,并不是要求选择带宽占用最小的,而是选择解析速率最高的,最合适的方法。

作者: ymmc001   发布时间: 2010-04-15

如果你的数据量特别大的话,我是比较赞同第二种写法的。你只需要写一个WRAPPER通过KEY来取VALUE就可以了。

作者: darktalker   发布时间: 2010-04-15

CSS code

第一种显示字段名称,字段多就浪费带宽。但是在字段多的时候 可读性 就比较强了。
第二种相反,字段多的时候可读性很差的,你知道在字段多的时候,数组中对应的字段是哪个吗?
所以要看情况,而定!!!

作者: IBM_hoojo   发布时间: 2010-04-15

引用 3 楼 ibm_hoojo 的回复:
CSS code

第一种显示字段名称,字段多就浪费带宽。但是在字段多的时候 可读性 就比较强了。
第二种相反,字段多的时候可读性很差的,你知道在字段多的时候,数组中对应的字段是哪个吗?
所以要看情况,而定!!!

正解
一切都在取舍之间

作者: scdn8311   发布时间: 2010-04-16

引用 3 楼 ibm_hoojo 的回复:
CSS code

第一种显示字段名称,字段多就浪费带宽。但是在字段多的时候 可读性 就比较强了。
第二种相反,字段多的时候可读性很差的,你知道在字段多的时候,数组中对应的字段是哪个吗?
所以要看情况,而定!!!


就经常的应用而言,都是把JSON的信息直接输出成table进行显示,基本不会用到什么调用,所以还是第二种情况值得采用,节省流量约30~40%,以返回记录数100条,字段20个,每个字段节省10个字节来算,原来需要传递60K,现只需要传递40K

作者: iscandy   发布时间: 2010-04-16

请问大家json怎么实现分页功能,params{page:0,limit:4}这句话到底是什么意思,是不是说开始页面为0,并且只显示4条记录?但是他是怎么受到第二条记录的开始为第四条的记录的。期待大家的帮助中。。。。。。。。。。。

作者: xiaohaifang   发布时间: 2010-04-16

引用 3 楼 ibm_hoojo 的回复:
CSS code

第一种显示字段名称,字段多就浪费带宽。但是在字段多的时候 可读性 就比较强了。
第二种相反,字段多的时候可读性很差的,你知道在字段多的时候,数组中对应的字段是哪个吗?
所以要看情况,而定!!!



完全正解,程序员需要做的软件的效率和可扩展行

作者: zhj012340   发布时间: 2010-04-16

你的想法很不错,但是如果使用第二种你要做数据处理,比如绑定的时候如何识别呢?
各有长短吧。

作者: HolyPlace   发布时间: 2010-04-17

想法不错啊

作者: jackbeibei   发布时间: 2010-04-17

json既然有这么个东西,西方哲理说的:存在即有理!自然有其无法代替的东西!

和天生我才必有用,一个意思吧!呵呵!

作者: falizixun2   发布时间: 2010-04-19

引用 5 楼 iscandy 的回复:

就经常的应用而言,都是把JSON的信息直接输出成table进行显示,基本不会用到什么调用,所以还是第二种情况值得采用,节省流量约30~40%,以返回记录数100条,字段20个,每个字段节省10个字节来算,原来需要传递60K,现只需要传递40K


我支持第一种的,结构优良,维护成本低。

每次传输json也就几K。。。达到几十K的可能性比较小。。。所以差别够小。。在gzip的情况下,差别估计更小。
如果为了节省这数据,全部用数组传输不是更好?[3,1,20,[],[[],[]]]

作者: smildlzj   发布时间: 2010-04-23

引用 11 楼 smildlzj 的回复:

引用 5 楼 iscandy 的回复:

就经常的应用而言,都是把JSON的信息直接输出成table进行显示,基本不会用到什么调用,所以还是第二种情况值得采用,节省流量约30~40%,以返回记录数100条,字段20个,每个字段节省10个字节来算,原来需要传递60K,现只需要传递40K

我支持第一种的,结构优良,维护成本低。

每次传输json也就几K。。。达到几十K的可能性比较小。……

支持!从用户体验角度来看没有差别,而且JSON从开发和维护的角度来看都比数组有更大的优势。

作者: doug_wang   发布时间: 2010-04-23

引用 11 楼 smildlzj 的回复:

引用 5 楼 iscandy 的回复:

如果为了节省这数据,全部用数组传输不是更好?[3,1,20,[],[[],[]]]


哈,我用的就是这种方法,是以前做智能提示的时候抄google的方案来的。对于一般只有5,6个字段的,或者更少点,4个左右,完全可以用数组和索引,没必要用json的。

作者: walkerwalker   发布时间: 2011-02-14