什么是Wave的客户端GWT架构

时间:2010-10-14 23:15:04

标签: performance gwt google-wave gwt-rpc

我想知道你们中的一些人是否了解Wave团队构建GWT Web客户端所采用的架构方法?由于我正在尝试优化为移动设备设计的一个GWT应用程序的性能,因此很难不欣赏它的快速凭据:)

  • Wave是否使用GWT-RPC从服务器获取定期更新? Firefox跟踪一些通过线路进行的JSON通信,但没有像RPC那样。

  • 例如,当发送新的小波时,它们如何进行。每个wave DTO都有一个视图对象,还是使用其他一些模式?

  • 如果在响应新的Wave后,GUI如何更新。整个区域是否会重新渲染小波或使用一些智能技术来确保只触及特定元素?

由于

1 个答案:

答案 0 :(得分:3)

这可能是信息过载,但由于Google Wave是开源的,您实际上可以看看他们如何设置here

例如,如果您查看WaveView.java,您可以看到他们正在使用Google IO 2009中this talk中提到的Ray Ryan等客户端事件总线。我似乎记得看到另一个视频他们谈到了Google Wave的这些方面:

  • 他们使用事件系统在客户端发生某些事情时触发事件。事件系统管理与服务器的通信,将事件信息传递到服务器,从服务器返回事件,以及发布返回的事件。事件总线使用一种缓冲区,这样如果一堆事件快速连续发出,它们可以一次性发送它们。例如,当新Wave到达时,具有wave信息的事件将被触发,并且将通知正在监听该事件的UI的任何部分,以便他们可以确定是否需要相应地改变自己。 / LI>
  • 他们使用接缝点(或者一些这样的;我记不起名字)来使GWT可以将代码分解成模块,并且仅加载实际需要使用的部分。由于wave ui javascript文件最初超过1MB(缩小和压缩),这非常重要。
  • 由于一次只能看到某些波和小波,它们实际上使用了一些复杂的技术来重用相同的DOM元素。因此,当您向下滚动波形列表时,它实际上将表示波形的DOM元素放在收件箱顶部,更改内部信息,并将其移动到滚动区域的底部,在零件中留下空白区域您不再看到的滚动区域。

此外,我非常确定他们使用Comet with JSONP来维持与服务器的持续通信,因此他们不会不断轮询服务器以获取新的更新,而是有一个动态生成的javascript文件正在加载从服务器递增,其中包含触发服务器已决定需要触发的任何事件的指令。