这可能是信息过载,但由于 Google Wave 是开源的,您实际上可以在此处查看它们是如何设置的。
例如,如果您查看 WaveView.java,您会发现他们正在使用客户端事件总线,就像 Ray Ryan在 Google IO 2009 的这次演讲中提到的那样。我似乎记得看过另一个视频,他们谈到了这些方面谷歌波:
- 当客户端发生某些事情时,他们使用事件系统来触发事件。事件系统管理与服务器的通信,将事件信息传递给服务器,从服务器获取事件,并发布返回的事件。事件总线使用一种缓冲区,因此如果一组事件被快速连续触发,它们可以将它们全部发送一次。例如,当一个新的 Wave 到来时,一个带有 wave 信息的事件将被触发,并且 UI 中正在积极侦听该事件的任何部分都会收到通知,以便他们可以确定是否需要相应地更改自己。
- 他们使用接缝点(或类似的;我不记得名字)来制作它,以便 GWT 可以将代码分解为模块,并且只加载实际需要使用的部分。由于 wave ui javascript 文件最初超过 1MB(已压缩和压缩),因此这非常重要。
- 由于一次只能看到某些波和小波,它们实际上使用了一些复杂的技术来重用相同的 DOM 元素。因此,当您向下滚动浏览波浪列表时,它实际上是在收件箱顶部获取代表波浪的 DOM 元素,更改内部信息,并将其移动到滚动区域的底部,在该部分中留下空白区域您不再看到的滚动区域。
Additionally, I'm pretty sure they use something like Comet with JSONP to maintain continuous communication with the server, so they're not polling the server constantly for new updates, but rather there's a dynamically-generated javascript file that's being loaded in incrementally from the server, which contains instructions to fire whatever events the server has decided need to be fired.