JSON的二进制编码?

3
我的Javascript应用程序从服务器下载了大量数据,我在考虑除了服务器正常执行的gzip外,是否可以将数据编码为某些二进制格式而不是文本JSON。
有没有标准的方法来做到这一点?
理想情况下,它应该是一个小工具,可以将JSON文本文件转换为通用的二进制格式和一个小型Javascript库来解码它。
此外,在XHR中传递二进制数据是否需要进行特殊处理?

如果服务器正在压缩数据,首先将其转换为二进制可能不会有太大帮助。你会发现,经过压缩的二进制版本与经过压缩的文本版本大小相似。 - JeremyP
3个回答

3

2
只是一点提醒:目前没有JS实现BSON。 - rob
2
我认为有一个,可以查看这个示例:http://kaijaeger.com/downloads/bison/examples/view/bisonclient.html - powtac
你是对的 :-) 然而,正如文章中所述,该实现并不工作得很好(消息大小相当大),我不知道它是否在实际应用中有用。 - rob
1
看了BSON的规范,我认为BSON编码的文档不会比JSON编码的文档小多少。例如,在JSON对象中的键名只比BSON对象中的键名长一个字节。小于1000的数字实际上占用比JSON更多的空间,完整的UTF-8字符串也是如此,尽管您可以使用C字符串格式在BSON中存储UTF-8(有关BSON规范中char 0的注释是错误的)。 - JeremyP
5
这个答案混淆了BSON和BISON。第一个链接是BSON,MongoDB使用的标准,而第二个链接(带有JavaScript实现)是BISON,一个个人项目。(公平地说,BISON的创建者在他自己的网站上错误地将其称为BSON...) - Trevor Burnham

3
如果gzip压缩效果不够好,那么你的二进制格式也很可能不会好,特别是如果你想要能够在合理的时间内通过javascript解码它。
请记住,使用gzip时的解压是由浏览器本身完成的,速度比你在javascript中做的任何事情都快得多。
如果您觉得JSON反序列化太慢,因为您支持旧版浏览器(如ie7),它不会原生解码JSON,而是依赖于eval来完成这项工作,请考虑从JSON转向基于字符串拆分的自定义编码,这样反序列化速度会快得多。
为了获得灵感,请阅读这篇文章:http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/

1

MongoDB正在使用类似的方式进行文档导向存储。您可以直接在BSON网站上获取更多详细信息。
不幸的是,BSON无法与Javascript一起使用(正如您可以从实现列表中看到的那样),因此我认为它不是您问题的好答案。

您可以考虑使用Protocol Buffers;它有一个JS编码器/解码器,但仍然相当实验性。
您可以尝试一下 - 很多时候,实验性的开源项目已经足够用于特定场景的使用。

还要注意,有一些质疑关于BSON是否比JSON更紧凑;同样也可能适用于其他协议,如protbuf - 我强烈建议您进行一些数学计算,并检查是否存在实际收益。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接