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、努力、面白いよく – CodaFi
私のプロジェクトgithub、NSOperation-WebFetches-MadeEasyを見ると、操作を管理するヘルパークラスがあります。私は店内の2つのAppsでこの正確なコードを大成功を収めて使用しており、しばしば100を超える操作をキューに追加します。 iOSはNSOperationsQueueと密接に連携して負荷を管理します。主なスレッドには何の影響も見ません。 –
CodeFiありがとうございます。 @DavidH私はあなたのプロジェクトをフォークし、私がそれから学ぶことを見るためにそれを見渡すでしょう。ありがとう。 – Brennan