Macのネット環境高速化「dolipo」はナゼこんなに速いのか

[追記 2008/02/29 12:55]
予想以上の反響を頂いているのですが、polipoの特徴の意訳部分がかなり曖昧で一部誤った表現をしているため、随時修正・追記しております。面倒だとは思いますが技術的な部分に興味のある方は、追記部分まで読んで頂ければと思います。
また、間違っている部分のツッコミ大歓迎です。コメントなりTBなり頂けますとありがたいです。

え〜、一部のMacユーザの間でdolipo祭り開催中です。

dolipo - drikin.com
dolipo

dolipoというのはこんなソフトです。

ごく一部で話題になり初めてるようですが、polipoは個人用にネットワークの高速化に特化したプロキシーサーバーで、実際試してみたところ、光の自宅回線ですら、mixiやFlickrが劇的に快適になったので、感動のあまり、Mac用GUIを作成しちゃいました。

via: Drift Diary12: dolipoで更に加速するインターネット : polipo proxy用GUIアプリを作りました。

つまり、ローカルにプロキシサーバーを作ってウェブアクセスを高速化するPolipoというのがあって、それを簡単に使えるようにdrikinさんがGUIアプリを作ったというわけです。

なんで速いかっていう議論の前にとりあえずインストール。

dolipoのインストールの仕方(+Firefox)

drikinさんの説明がLeopardだったのでTigerなオレのマシンでの設定(まあ同じだけど)。

1)ソフトをダウンロード
dolipo - drikin.comからdolipo.zipをDLします。

2)解凍してアプリケーションフォルダにインストール
普通に解凍して出てくるdolipo.appをアプリケーションフォルダに放り込みます。

3)初回起動時にプロキシ設定を促されます
dolipo setting01

4)プロキシ設定
dolipo setting02
[システム環境設定]→[ネットワーク]→(無線LANの場合は)[AirMac]→[プロキシ]を開いて、
・プロキシの設定:手入力
・設定するプロキシサーバを選択:HTTP/HTTPS
・FTPプロキシサーバ:127.0.0.1:8123
・プロキシを使用しないホストとドメイン:除外したいホストやドメインを羅列

これだけです・・・が、Firefoxは専用のプロキシ設定があるようなので下記のように設定します。
(ちなみに、バージョンは2.0.0.12)

5)Firefoxのネットワーク設定を開く
firefox setting01
[Firefox]→[環境設定]→[詳細]→[ネットワーク]タブ→[接続設定]をクリック

6)プロキシの設定
irefox setting02
・「手動でプロキシを設定する」にチェック
・「HTTPプロキシ」「SSLプロキシ」に127.0.0.1、「ポート」に8123を指定
・プロキシから除外するドメインがあれば、「直接接続するサイト」に羅列

dolipo(polipo)がネットを高速化する理由

proxyとか書かれているせいか「え〜、ただのキャッシュだろぉ?」とか疑っている人がいるみたいですね。
はてなブックマーク - dolipoで更に加速するインターネット : polipo proxy用GUIアプリを作りました。
はてなブックマーク - Macのネット生活が3倍改善する「dolipo」リリース: [mi]みたいもん!

で、dolipo祭りのきっかけエントリーを書いたいしたにさんに「ただのキャッシュ言ってないでちゃんと(英語の)説明読まんかい」という趣旨のアドバイスをもらったので読んでみました。したら、超簡潔に特徴が箇条書きしてあった。

# Polipo will use HTTP/1.1 pipelining if it believes that the remote server supports it, whether the incoming requests are pipelined or come in simultaneously on multiple connections (this is more than the simple usage of persistent connections, which is done by e.g. Squid);
# Polipo will cache the initial segment of an instance if the download has been interrupted, and, if necessary, complete it later using Range requests;
# Polipo will upgrade client requests to HTTP/1.1 even if they come in as HTTP/1.0, and up- or downgrade server replies to the client's capabilities (this may involve conversion to or from the HTTP/1.1 chunked encoding);
# Polipo has complete support for IPv6 (except for scoped (link-local) addresses).
# Polipo can optionally use a technique known as Poor Man's Multiplexing to reduce latency even further.

via: Polipo -- a caching web proxy

とりあえず、意訳してみました。

1)リモートサーバ(接続先)が対応している場合はなるべくHTTP/1.1 パイプラインを使います。
パイプラインというのは持続的な接続を行う事で、再接続時の負荷をなくしましょうという考え方。(2008/02/29 エントリー最後にパイプラインについて追記あります)(2008/02/29 13:00 パイプライン=持続的接続ではありませんでした。追記2をご覧下さい)

2)Polipo はダウンロードが中断された場合、途中までの状態をキャッシュしておいて、続きからダウンロードを完了させます。
・再取得する手間をはぶいたという事か。

3)Polipo はクライアントが HTTP/1.0 でリクエストしてきた場合、HTTP/1.1に変換してサーバの応答をクライアントの能力に応じて変更します。
・1のパイプラインを使うためなのかも。HTTP/1.1になるだけで高速化したりするのかな?

4)PolipoはIPv6 をほぼ完全にサポートしています。

5)Polipo はPoor Man's Multiplexing を利用できます。
スミマセン、ここは良く分かりませんでした。(2008/02/29 13:20 追記3に解説があります)

分かってない事が多すぎですが(...)取りあえず言える事は、全然キャッシュを強調している訳ではなくて、むしろ、HTTP/1.0→HTTP/1.1変換とパイプライン(持続的な接続)がポイントのような気がします。

まとめ。本当に3倍速いのか?

Polipoのサイト内にベンチマーク結果がありました。(ただし非科学的(unscientific)と自分で言ってますが)
Polipo -- a completely unscientific benchmark

いろんなパターンをやってますが、気になるのは動的なコンテンツ。
bench
Polipoあり(Wget through Polipo)とPoilpoなし(Wget)の差が約倍ですね。
つまりベンチマーク的には2倍速いという事ですね。(色々条件にもよるだろうけど)

ただ、体感としてはもっと速い。
ってかLDRとかYoutubeとか本当に激速!3倍っていうのも頷ける。
本当にこれはMacユーザ必携ツールになりそうです。

[追記 2008/02/29 10:00]
パイプラインの説明が適当すぎてスミマセン。
もっとちゃんと解説されているエントリーがありますので下記も参照下さい。

パイプラインは「持続的な接続」を行ったうえでさらに、サーバーが応答を返しきる前に次のリクエストを送ることで、リクエストと応答のタイムラグを減らしましょうという考え方です。

via: polipoのパイプラインについて - わかつも

いい感じさんのTB経由です。ありがとうございました!

[追記2 2008/02/29 13:00]
追記のわかつもさんエントリーにも書いてありますが、パイプライン=持続的接続ではありません。

Persistent Connections持続的接続
→「再接続時の負荷をなくしましょう」というのはこちらのことですね。

Pipeliningパイプライン化
→パイプライン化とは、サーバからのレスポンスを待たずに複数のリクエストを投げられる機能です。1回の接続で複数のリクエストを送って複数のレスポンスを受ける、このまとめ処理が接続の効率化につながるようです。

持続的接続については下記ページがとても参考になりました。
[Studying HTTP] Persistent Connections

[追記3 2008/02/29 13:20]
よくわからなかった、Poor Man's Multiplexingについて説明されているエントリーがありました。

* html を読み込み、ファイル中のメタデータを順次読み込んでいくのは遅い
* メタデータ(画像や動画などのファイル)の先頭には、サイズが格納されている(ハズ)
* メタデータ全体を一度に読み込むのではなく、If-Range ヘッダを指定して全体のサイズ数を取得できる程度の分だけ読み込んでその情報をブラウザに返せば、レンダリングが中断しないため体感速度が上がる
* さらに、各メタデータの内容を読み込む際には If-Range ヘッダを指定して特定のサイズずつ同時に取得する。これにより巨大なサイズのメタデータがあるためにそこで詰まってしまい他のメタデータが読み込まれない(遅れる)、ということが避けられる

via: オープンタイプ株式会社ブログ >> dolipo で快適ネット生活

画像や動画を読み込む際には、If-Range ヘッダを使って適量づつ読み込むという事でしょうか。

同じカテゴリーの記事

このページの一番上に戻る
  • Facebook
  • Twitter
  • Tumblr
  • Instagram
  • miil