這可能是信息超載,但由於谷歌Wave是開源的,你其實可以看看他們是如何設置的東西,here。
例如,如果您看一下WaveView.java,您可以看到他們正在使用客戶端事件總線,如在Google IO 2009中的this talk中提到的Ray Ryan。我似乎記得看到他們談論的另一個視頻Google Wave的這些方面:
- 他們使用事件系統在客戶端發生事件時觸發事件。事件系統管理與服務器的通信,將事件信息傳遞給服務器,從服務器獲取事件,併發布返回的事件。事件總線使用一種緩衝器,以便如果一堆事件快速連續發射,他們可以一次發送所有事件。例如,當一個新的Wave到達時,將會觸發一個包含wave信息的事件,並且會通知正在積極監聽該事件的UI的任何部分,以便他們可以確定是否需要相應地更改自己。
- 他們使用了接縫點(或其他一些;我不記得名字),以便GWT可以將代碼分解成模塊,只加載實際需要使用的部分。由於wave ui javascript文件最初超過1MB(縮小和壓縮),這非常重要。
- 由於一次只能看到特定的波和小波,他們實際上使用了一些複雜的技術來重複使用相同的DOM元素。因此,當您向下滾動瀏覽波形列表時,實際上會將代表波形的DOM元素代表收件箱頂部,更改內部信息並將其移至滾動區域的底部,從而在部分中留下空白區域您不再看到的滾動區域。
此外,我敢肯定,他們使用類似彗星JSONP來與服務器保持持續溝通,所以他們不輪詢服務器不斷地爲新的更新,而是有一個動態生成的JavaScript文件這是從服務器遞增加載的,其中包含指示以啓動服務器決定需要觸發的任何事件。
Wave使用瀏覽器通道與服務器通信,這是一種技術,您可以在Google的Closure庫中找到(http://closure-library.googlecode.com/svn-history/r144/docs/closure_goog_net_browserchannel.js.html ),與App Engine中的Channel API類似(在此討論:http://code.google。COM /事件/ IO/2010 /會話/樓宇的實時應用程序,應用程序引擎送進api.html) – 2010-10-15 02:12:24