JavaScript的协议缓冲区?

23

有没有一种方法可以在JavaScript中使用协议缓冲区?

为什么要使用.js?

如果你考虑一下科技需求,就会出现这样的情况,你可能想向客户端发送一个大块的数据。对于CRUD风格来说,你使用什么并不太重要。但对于科技需求来说,它很重要(至少我认为是这样的)。

权衡:

  • 协议缓冲区可以平衡紧凑性、序列化和反序列化速度。

  • 基于文本的协议(xml / json)具有更大的消息大小......但是对于JavaScript,我想知道哪个更有效。

参考资料:

社区提供的其他参考资料(有关更多上下文信息,请参见下文):


仅返回翻译文本:ty。已将此添加为参考。 - sgtz
2
我发现了另一个用于JavaScript的协议缓冲区项目。这个项目似乎很活跃,依赖于谷歌的closure库:http://code.google.com/p/protobuf-plugin-closure/ - alavrik
至少有一些人对此感兴趣。我有时想知道为什么人们不更多地联合起来。 - sgtz
@AndrewBarber 在审查时,也许您的反对意见是问题以聊天的方式开头。自该问题首次编写以来,JS社区已经发生了很大变化。然而,在JavaScript中仍然需要一流的Protobuffer支持。我认为这个问题仍然是相关的。 - sgtz
3个回答

14
Google在JS中(如GMail等)广泛使用Protocol Buffers,通过其Closure Library生成JS代码,使用了(不幸的是未开源的)修改版的protoc(在开源之前可能需要将其移植为protoc扩展程序)。
Apache Wave(其客户端Web应用程序是使用GWT构建的)还使用Protocol Buffers与服务器通信,通过反射protoc生成的Java类生成Java代码(这是PST,又名protobuf-stringtemplate子项目)。 以前,Wave使用了protostuff(我不知道他们为什么要切换到自己的解决方案,我怀疑PST源于最初的Google Wave所使用的内容,而protostuff只是在转向开源过程中的一个中间步骤)。
顺便说一下,我一段时间以前开始探索在浏览器端使用Protocol Buffers:http://blog.ltgt.net/exploring-using-protobuf-in-the-browser/http://blog.ltgt.net/using-protobuf-client-side-with-gwt,其中有一些几乎可以工作的代码http://code.google.com/p/protobuf-gwt/,你可能想要恢复。
最后,正在进行工作,使得 GWT RequestFactory 代理与由 protoc 生成的服务器端 Java 类兼容(您可以使用 protoc 扩展或类似 Wave 的 PST 方法来生成 RequestFactory 代理)。如果在服务器端一直使用构建器(这不完全是 Protocol Buffers Java API 的设计方式),则已经可以实现。

我开始考虑使用JavaScript版本的protobufs时可能会遇到的跨浏览器问题。在你的测试中,你遇到了很多这方面的问题吗? - sgtz
我们最终采用了不同的架构,完全没有使用Protocol Buffers,因此并没有进行太多的测试。但是,无论是Closure还是GWT(或您选择的JS库),都可以处理与编码/解码消息为JSON以及传输protobuf/json编码消息(XMLHttpRequest)相关的大部分跨浏览器问题。 - Thomas Broyer
抱歉...我从您的信息性答案转向了dcode的答案。看起来js proto的状态正在改变。 - sgtz

8
历史上,JavaScript处理二进制数据相当繁琐,这或许可以解释为什么工具相对缺乏。但是有了JavaScript的类型化数组,现在可能会更加容易了。我有点同意,如果您需要获得相同数量的数据(通过某种格式),那么使用更少的带宽是一个好处,但在开始任何事情之前,您需要检查带宽/处理是否真正成为瓶颈(如果是带宽:您是否首先尝试过gzip / deflate)。
我是protobuf的粉丝,并且很高兴看到它在浏览器端有更强大的工具支持,但是JSON如此广泛使用,以至于您需要有一个引人注目的理由来挑战现状。还有,请考虑使用"jsonp"。

1
看了一下"jsonp"。不错的技巧。谢谢你提醒gzip...引入额外的表示和步骤似乎有些可惜。 - sgtz
@sgtz 我的观点是,jsonp 解决了关于同源的特定问题;我不确定你如何使用原始数据解决同源问题。 - Marc Gravell

7

谢谢。我会关注这个项目的进展。未来我想支持类似的事情。希望能出现一个功能强大的库。 - sgtz
自2008年发布0.0.0版本以来,似乎没有任何更改。当然,这可能仍然可以使用。您尝试过吗? - Arjan
抱歉,我已经有一段时间没有处理这个了。无法回答太多问题。从我记得的来看,它做到了它所宣传的。我没有在生产环境中使用过,所以不能百分之百地保证它的可靠性。 - agarcian
这是我发现的最好的JS Protobuf库。目前正在使用它,效果很好。 - sethro
最近似乎很活跃(2014年)。有11个版本发布,21个开放问题和127个已关闭问题,但维基似乎不够丰富。 - Evi Song

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