iPhoneやiPod Touchは、ネットワークの性能がそれほど高くないため、NSURLConnectionでたくさんコネクションを張ったりすると目に見えて遅延します。
以下のような実験をやってみました。
性能テスト
iPhone SDKで、以下の2種類のテストアプリを作りました。
なお、機材の都合上iPhoneではなくiPod Touchを使っています。
【A】
タイマーで0.05秒ごとにHTTPリクエストを送信し、レスポンスとして受け取った画像を表示する。
サーバでは、リクエストを受け取るたびに0~9の数字画像を順番に返す。
【B】
UDPで接続を待ち、画像データを受け取ったら表示する。
サーバでは、iPhoneに向かって0.05秒ごとに0~9の数字画像を順番にUDPで送信する。
サーバは、十分に高性能なマシンを、有線LANで接続しました。
MacBook ProやiPod Touch実機は、同じ無線LAN (IEEE802.11g) を使っています。
【結果】
このように、HTTPを使う場合、シミュレータではスムーズに動くものの、実機ではかなりカクカクです。
実機でも、HTTPを使わずにUDPにしてしまえば、十分スムーズになることが分かります。
今回使った画像は各2KB程度のPNG画像ですが、50KB程度のJPG画像を使っても結果はほとんど変わらなかったため、帯域よりもコネクションの数が大きなウェイトを占めているようです。
どの程度性能が出るか大まかに分かれば良かったので、原因などの細かい検証は今回は行いません。
使ったソースコードなどは後日このブログに載せておこうかと思います。