JavaScript的协议缓冲区?

时间:2011-08-16 05:58:47

标签: javascript gwt protocol-buffers

有没有办法在JavaScript中执行协议缓冲?

为什么选择.js?

如果您暂时考虑科学要求,可能会弹出一些情况,您可能希望将大量数据发送到客户端。使用CRUD风格时,您使用的内容并不重要。对于科学的东西,它确实很重要(至少我认为它确实如此)。

权衡:

  • protobuff平衡紧凑性,序列化和反序列化速度。

  • 基于文本的协议(xml / json)有更大的邮件大小...但是使用javascript我不知道哪个更有效。

参考:

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

3 个答案:

答案 0 :(得分:12)

Google通过他们的Closure库大量使用JS(GMail等)中的Protocol Buffers,使用(不幸的是非开源的)修改后的protoc生成JS代码(它可能必须是< em>在开源之前将移植到protoc扩展名。)

Apache Wave(其客户端 webapp是使用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/&amp; 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的设计方式),那么它应该是可能的。

答案 1 :(得分:8)

历史上javascript使用二进制工具变得很痛苦,这可能部分解释了相对缺乏工具 - 但是使用javascript类型的数组现在可能会轻松得多。我有点同意,如果你 获得相同数量的数据(通过某种格式),使用更少的带宽是一个优点 - 但在开始任何事情之前,你需要检查带宽/处理是一个实际的瓶颈(如果带宽:你先尝试过gzip / deflate)。

我是protobuf的粉丝 - 我很高兴看到更强大的浏览器端工具,但json无处不在,你需要一个令人信服的理由挑战现状。也;想想“jsonp”。

答案 2 :(得分:7)

我一直在寻找javascript的protobuf。这里有一个项目: https://github.com/dcodeIO/ProtoBuf.js