ネットワーク
iOSDevネットワーキングオーバービュー
developer.apple.com
詳細はリンク先をみるとして冒頭の要点をまとめてみる。
ネットワークは信頼性が低いから以下に注意。
現実
対策
- まずデータのアップロード・ダウンロードはユーザに時間と費用を課していることに気づけ。これを最小限にせよ。
なるべくまとめる。
- どんなときも一括ダウンロード。都度ダウンロードすると遅延にも脆弱になるし、操作性も悪くなる。
- ダウンロードの量を最小にしてローカルにキャッシュしてね。前回から更新があるかを問い合わせてダウンロードしてね。
- 大きな画像を小さく表示するならはじめから小さな画像を用意してね。
- キャッシュ容量は各自工夫して下さい。
- トレードオフがいつもあるよ。例えば商品画像が並ぶとき、この画像をどこまで一括ダウンロードすべきか。。
ネットワークの状況変化への備え
- いつでも圏外、機内モード、Wifiを切る等の自体に対処してね。
- ユーザが意図的に接続しようとしているかが重要だよ。そういうときはいつでも接続しようとするべきだよ。すぐに接続できないときはユーザがキャンセルしない限り再接続を試みようとして下さいね。SCNetworkReachabilityをうまくつかってね。接続状態はモダールでない手段で表示してね。
- バックグラウンドで接続しようとした場合もモーダルでダイアログとか表示しないでね。再試行するにしても時間を開けていくようにしてね。
- SCNetworkReachabilityは状態が変換したときに通知が飛ぶよ。でもこのAPIは接続を事前に判断するものではなくて、接続に失敗してその原因を調べる時に使ってね。
通信速度の判断
少量のデータをダウンロードしてそれに費やした時間から評価してね。この評価値は都度図り直して精度を高めてみてね。
動画配信とかで速度が再生に追いついていないときは低帯域幅用の処理に一時的に切り替えるとか。
遅延
- 遠隔ホストへの要求で、応答を待ってからやっているとどんどん遅れていくよ。同時に送ったほうが良い。
- NSURLConnectionのパイプライン処理 NSMutableURLRequest.setHTTPShouldUsePipeliningを使うと複数のHTTP要求を同時に出せるよ。