2012-07-18 8 views
15

GitHubでプロジェクトを作成したので、iOSアプリケーションのネットワークを最適化する方法を学ぶことができます。私はブロックとGCDを大々的に使いました。そして、WWDC 2012の過去のビデオとビデオを見て、私はNSOperationQueueでもっと多くのことをすることができるかもしれないことを学びました。具体的には、並行操作(ネットワーク接続)の数を制御し、操作の取り消しを提供することができます。私は1,2,4,8,16並行操作を可能にすることを試しています。私が完全に期待していなかった興味深い結果を見ています。私は結果を測定していますが、私が測定する必要がある以上のものがあるのだろうかと思います。iOSでネットワーキングを最適化するにはどうすればよいですか?

あなたがここにサンプルプロジェクトを見つけることができます:私はNSURLConnectionの非同期APIを使用しておりますのでAPIが待っかなりの時間を費やしているので

https://github.com/brennanMKE/OptimizedNetworking

は、利益の多くは、多くの同時接続を有することがありますHTTPパケット。以前は、私のコードは一連のアイテムから始め、すべてを順番に要求していました。これは並行処理の利点を妨げています。私はまた、ネットワーク接続をキャンセルする通知を使用しています。今私はこのプロジェクトで操作を行うことができ、優先度とカテゴリの値を使用するように設定して、ダウンロードの優先順位付けとソート、操作のカテゴリのキャンセルを行うことができます。私は各ビューにカテゴリを使用することを選択でき、ユーザーがビューを離れるときに、そのビューのすべての操作はそのカテゴリを使用して取り消されます。これにより、アクティブなビューのリソースが解放されます。

さらに多くの同時操作を使用することに対する懸念の1つは、CPU使用率とI/Oですが、iOSでこれらの値を測定する方法はわかりません。 CPU使用量を表示するためのiOSの "w"コマンドと同等の機能が役に立ちます。私はI/Oについてあまり心配していませんが、それを測定する方がより包括的です。

私がネットワーク化を行っていた主な問題は、応答性の高いUIでした。私がやっていることが、UIを低迷させていることが分かりました。この新しいアプローチは多大な助けになるかもしれませんが、私は同時に実行する操作の数を減らしてください。最適な操作数は接続タイプ(3G、WiFiなど)によって異なるため、接続タイプを確認すると最適化が行われる可能性があります。

あなたのアプリでネットワーク通信を高速化する方法についてもっと詳しく知りたい場合は、このサンプルプロジェクトを試してみて、パフォーマンスを測定してさらにコミュニケーションを最適化する方法を提案してください。 (また、私はアップルのサンプルプロジェクトMVCNetworkingとASIHTTPRequestプロジェクトを参照しています。

私が次に行うことができるのは、ダウンロードしたデータの合計を集計し、

READMEファイルには、プロジェクトを説明するのに役立つはずです。ダウンロードを完了し、それがどのように働くか。

+1

+1、努力、面白いよく – CodaFi

+1

私のプロジェクトgithub、NSOperation-WebFetches-MadeEasyを見ると、操作を管理するヘルパークラスがあります。私は店内の2つのAppsでこの正確なコードを大成功を収めて使用しており、しばしば100を超える操作をキューに追加します。 iOSはNSOperationsQueueと密接に連携して負荷を管理します。主なスレッドには何の影響も見ません。 –

+0

CodeFiありがとうございます。 @DavidH私はあなたのプロジェクトをフォークし、私がそれから学ぶことを見るためにそれを見渡すでしょう。ありがとう。 – Brennan

答えて

3

を、これはMKNetworkKitでNSOperationQueue最大接続サイズを設定する前にMugunthクマーが実際に到達可能性クラスを使用して接続の種類をチェックすることができます場合は

+0

Quinnの "The Eskimo"によれば、ネットワーク接続のタイプ(WiFi、3G、Edgeなど)に基づいてはいけませんが、ダウンロードの速度を測定して決定する必要があります。また、iPod、iPhone、iPadの複数の同時操作のメトリックにも興味があります。私はMKNetworkKitをチェックします。 – Brennan

+0

私は同意しがちですが、私たちがEDGEネットワーク上にいることを知っていることの利点を知ることができます。最大ダウンロード速度はおそらく最大で1-2個のネット操作キューしか取らないでしょう。 d/l速度を測定することで、おそらくこの最初のチェックを増やすことができます。仮定が間違っていた場合、現在のスループットに基づいて調整を行うことができます。 – IanStallings

+1

サンプルアプリケーションでは、さまざまなシナリオの統計情報を表示するために、パフォーマンスを追跡する予定です。私はおそらくコアデータをまとめて、すべての履歴の要約を可能にするために実行結果の集計を維持するでしょう。それはさらに最適化する方法を明らかにするかもしれません。 – Brennan

関連する問題