1

Wave チームが GWT Web クライアントを構築するために採用したアーキテクチャ アプローチを知っている方がいらっしゃるのではないでしょうか? モバイル向けに設計された 1 つの GWT アプリのパフォーマンスを最適化しようとしているので、その迅速な資格情報を賞賛せずにはいられません :)

  • Wave は GWT-RPC を使用してサーバーから定期的な更新を取得していませんか? Firefox はネットワーク上で行われる JSON 通信を追跡しますが、RPC のような通信は追跡しません。

  • たとえば、新しいウェーブレットが送信されたとき、それらはどのように処理されますか。すべての Wave DTO にビュー オブジェクトがありますか、それとも他のパターンを使用していますか?

  • 新しい Wave が到着したなどの応答後に、GUI はどのように更新されますか。ウェーブレットを含む領域全体を再レンダリングしますか、それとも特定の要素だけが確実に処理されるようにするためのスマートな手法を使用しますか?

ありがとう

4

1 に答える 1

3

これはおそらく情報過多ですが、Google Wave はオープン ソースであるため、ここで実際にどのように設定されているかを確認できます。

たとえば、WaveView.java を見ると、Google IO 2009でのこの講演で Ray Ryan が言及したようなクライアント側のイベント バスを使用していることがわかります。 Google Wave:

  • イベント システムを使用して、クライアント側で何かが発生したときにイベントを発生させます。イベント システムは、サーバーとの通信を管理し、イベント情報をサーバーに渡し、サーバーからイベントを取得し、返されたイベントを公開します。イベント バスは一種のバッファを使用して、一連のイベントが立て続けに発生した場合に、それらをすべて 1 つのバッチで送信できるようにします。たとえば、新しい Wave が到着すると、Wave 情報を含むイベントが発生し、そのイベントをアクティブにリッスンしている UI の部分に通知されるため、それに応じて自分自身を変更する必要があるかどうかを判断できます。
  • GWT がコードをモジュールに分割し、実際に使用する必要がある部分のみをロードできるように、シーム ポイント (またはそのようなもの。名前は思い出せません) を使用しました。Wave UI の JavaScript ファイルはもともと 1MB を超えていたので (縮小および圧縮)、これは非常に重要でした。
  • 一度に表示できるのは特定のウェーブとウェーブレットのみであるため、実際にはいくつかの複雑な手法を使用して同じ DOM 要素を再利用しました。wave のリストを下にスクロールすると、実際には、受信トレイの上部にある wave を表す DOM 要素が取得され、内部の情報が変更され、それがスクロール領域の下部に移動され、その部分に空白が残ります。もう表示されていないスクロール領域の。

さらに、サーバーとの継続的な通信を維持するためにJSONPを備えたCometのようなものを使用していると確信しているため、サーバーを常にポーリングして新しい更新を求めているのではなく、動的に生成されたjavascriptファイルが動的に生成され、これには、サーバーが起動する必要があると判断したイベントを起動するための指示が含まれています。

于 2010-10-14T23:21:38.697 に答える