2010-10-14 21 views
2

我想知道您是否有些人知道Wave團隊爲構建GWT Web客戶端所採取的架構方法?因爲我想優化一個GWT應用程序專爲移動設備的性能,很難不佩服其迅速憑據:)什麼是Wave的客戶端GWT架構

  • 是波不使用GWT-RPC從服務器獲取定期更新? Firefox會跟蹤一些JSON通信,但不會像RPC的東西。

  • 它們如何在例如發送新小波時繼續進行。是否有每個波DTO的視圖對象,或者他們使用其他模式?

  • GUI如何在例如新Wave的響應到達後進行更新。整個帶小波的區域會被重新渲染還是使用一些巧妙的技巧來確保只有特定的元素被觸摸?

感謝

回答

3

這可能是信息超載,但由於谷歌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文件這是從服務器遞增加載的,其中包含指示以啓動服務器決定需要觸發的任何事件。

+1

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