有没有办法在JavaScript中执行协议缓冲?
为什么选择.js?
如果您暂时考虑科学要求,可能会弹出一些情况,您可能希望将大量数据发送到客户端。使用CRUD风格时,您使用的内容并不重要。对于科学的东西,它确实很重要(至少我认为它确实如此)。
权衡:
protobuff平衡紧凑性,序列化和反序列化速度。
基于文本的协议(xml / json)有更大的邮件大小...但是使用javascript我不知道哪个更有效。
参考:
code.google.com/p/protobuf-plugin-closure
Google Protocol Buffers or something similar for .net/javascript
http://www.vitaliykulikov.com/2011/02/gwt-friendly-protocol-buffers.html
http://benhakala.blogspot.com/2010/05/converting-google-protocol-buffers-to.html(暗示可能使用protobufs的谷歌地图)
社区提供的其他参考资料(有关更多背景信息,请参见下文):
答案 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