2009-04-01

Google Friend Connect JS API が Firefox2 だと遅い理由が分かったかも!?

こんばんは。なかじまんです。

Google Friend Connect JS API を使い始めてみたのですが、どうやって People や AppData などのサイズの大きいデータをクロスドメインで交換しているのか気になったので、次の実例を元にその仕掛けを調べてみました。

Welcome to the Friend Connect integration example site
http://www.ossamples.com/api/

基本的な仕掛けは Gadgets API の gadgets.rpc と同じようです。きっと実装も同じでしょう。ですので、IE6, IE7, Firfox2 など、旧世代の多くのブラウザでは、iframe と rpc_relay.html のフラグメントを使って、お互いにリレー(プロキシ)して、クロスドメインのデータ交換をすることになります。

そこで、大きな疑問にぶつかりました。IE6 や IE7 の URL 最大長は 4000 バイト弱です。もちろんフラグメントも含みます。4000 バイトでは People や AppData などのサイズの大きいデータは、とても収まりません。ですが、JS API は 4000 バイトを超えるであろうデータを取得できているのです... なんでだろう。

newFetchPersonRequest をよくよく観察してみると、1回の実行結果を分割して iframe と rpc_relay.html で繰り返しリレーしているようです。その1回のデータサイズは 4000 バイトに収まるようになっています。4000 バイトを超えるときは、分割してリレーしてるってことなんでしょう。ビビリました。

なお、Firefox3 など window.postMessage などフレームウィンドウ間でメッセージを交換できる API を備えたブラウザはその限りではありません。たぶん。そう見えます。

ですので、Google Friend Connect JS API は、ブラウザによって、かなりパフォーマンスのバラツキがあることになります。Firefox2 でなんだかロードが遅いなぁと感じるところがあったのですが、ここらへんが原因の1つのようですね。

ざっと調べたので、少し事実と異なることがあるかもしれません。あしからずです。

0 件のコメント: