2010年02月02日
websocket pipelineで、webは早くかつ低コストになるか?を実験
websocket pipelineのデモの拡張版を開発しました。で言及している、websocket pipelineですが、このデモだけ見ると「なんだ、特殊な用途だけじゃん」と思った方もいらっしゃると思います。 僕の意見としては,「いやいや、この話は普通のWebにも成り立つと考えています」なんですが、具体的なユースケースが無いと、やっぱり信憑性に欠けるし分かり辛いですよね、、、ということでサンプルデモを作って見ました。

サンプルサイトは、こちら(http://bloga.jp/koma/ws/100images/wspipeling.html)です。今回も、高橋登史朗さんのご厚意で公開させていただいています。 「画像をたくさん含むようなサイトを見ようとすると、画像のダウンロードに時間がかかって中々開かない(・ω・)」という経験をされた方は多いはずです。で、この要因の一つとして「httpでは、前の画像のダウンロードが終わらないと、次の画像のダウンロードが始まらない(待ってる時間だけ時間を食っている)」というのがあるのでは?と考えました。 一方,websokcet pipelineなら「いちいち、(前の画像のダウンロードが終わるのを)待たないんだから、ひょっとして早くなるんじゃない?」と考えたのが、このサンプルを作った理由です。 "via ws(websocket pipeline)"をクリックすると、websocket pipelineで100個の画像(我が家の愛犬ですf^-^;;)をダウンロードし、"via http(append DOM)"をクリックすると、普通のhttp(DOMのappendChildで実装しています)で同じ個数の画像をダウンロードします。 正直、僕が以前作ったwebsocket pipelineデモほど、その差は顕著ではないのですが(僕の環境ではwebsocket pipelineの方が2倍程度早いだけだった。アメリカとかからなら、もっと開くと期待)、その理由は以下ように考えられます。
- 同時コネクション数の違い DOMの追加で画像ダウンロードを行うと、最大で6個のtcp connectionが張られるようです(chromeの場合:xhrでは最大で3コネクションでした)。同時にコネクションを複数張るというのは、例えるなら、6台のトラックで複数の荷物を手分けして運ぶのと同じですので、それだけ従来のhttpでも早くなります。
- base64エンコード websocket(執筆時点では72)では、binary-frameも運べることになっているのですが、現状binaryを扱うapiが無い(;-;)ということで、websocket pipelineではbase64でテキストエンコードした画像をダウンロードしています。ですので、ダウンロードするバイト数がwebsokcketのほうが現状では大きくなってしまう(1.5倍程度)というのが、顕著なスピードの差に繋がらなかったと考えられます。

トラックバックURL
この記事へのコメント
1. Posted by GW2 gold 2013年04月08日 22:15
この記事では、私は他の人と共有転載したい、非常に良いです!