谷歌协议缓冲器或.NET / JavaScript的类似(Google Protocol Buffe

2019-07-30 05:27发布

目前,我们正在使用Ajax调用.NET Web服务是然后返回一个JSON对象给客户端。 一些JSON对象是相当巨大的(> 500K未压缩)。 我们已经听说过谷歌协议缓冲一些好的东西,并一直在尝试。

到目前为止,我们有不错的运气与序列化似乎是最常见的.NET版本的服务器上 - “protobuf网”。 我们还没有在客户端上的运气反序列化。 我们试图用什么似乎是独一无二的JavaScript解串器protobuf.js。 我们发现,这是不容易使用,也有极少数的例子或文件,而且它似乎并没有处理超出字符串和整数数据类型。

它将似乎在这一点上,将是.NET和Web客户端之间的二进制数据序列化/反序列化一个成熟的,明确的解决方案。 也许我们失去了一些东西明显。

我们的要求是阿贾克斯从客户端调用和服务器(或者的.asmx WCF)上的.NET Web服务的方法。

任何意见和建议表示赞赏。

Answer 1:

如果客户端的JavaScript是,我想你就很难。 有(如你所述) 的限制 JavaScript的覆盖面,但我不知道它会得到你很多。 为了从肯顿·瓦尔达引用 (谁真正知道protobuf的):

使用JavaScript和protobuf的一个问题是,你需要很多的支持代码解析的消息。 除非你最终挺送了很多的东西来回,让用户下载一个JS protobuf的编解码器库可能是一个净损失。 它可以更好地使用JSON或XML因为浏览器已经内置了对那些支持。

也就是说,我认为谷歌内部不同的人一直在玩的JavaScript +协议缓冲一段时间,如果我们最终得到任何作品不够好,我们就会将其释放。

因此,也许有希望的道路。 现在我会坚持使用JSON +放气,或者如果您的方案允许它,你也许可以使用嵌入在客户端Silverlight的小程序? protobuf网将里面的Silverlight工作。



Answer 2:

您可能会发现JSON,其实是最好的答案。 贾斯汀做了一系列的JSON的性能比较节俭和协议缓冲器 ,发现压缩JSON比协议缓冲区更快,至少在Python。 下面是一个较早的线程的话题。



Answer 3:

如所提到的,使用二进制协议从JavaScript是有问题的。 特别是一些讨厌的方面是:

  • 这是难以可靠地访问内容为二进制,从JavaScript -变通通常是浏览器特定的(见访问在Javascript中,阿贾克斯,IE二进制数据:可以responseBody可以从Javascript(不VB)读? )
  • 编码/解码标准IEEE编码双/浮点值是困难的,低效率的(如果不是完全不可能的话)

而且性能非常不太可能更快,相比之下,JSON或XML的原生支持。



文章来源: Google Protocol Buffers or something similar for .net/javascript