15

iOS アプリのネットワークを最適化する方法を学べるように、GitHub でプロジェクトを作成しました。私はブロックと GCD を多用しており、WWDC 2012 のビデオと過去数年間のビデオを見た後、NSOperationQueue でさらに多くのことができる可能性があることを知りました。具体的には、同時操作 (ネットワーク接続) の数を制御したり、操作のキャンセルを提供したりできます。1、2、4、8、および 16 の同時操作を許可する実験を行っていますが、まったく予想していなかった興味深い結果が得られています。結果を測定していますが、もっと測定すべきものがあるのではないかと思います。

サンプル プロジェクトは次の場所にあります。

https://github.com/brennanMKE/OptimizedNetworking

私は NSURLConnection の非同期 API を使用しているため、API は HTTP パケットの待機にかなりの時間を費やすため、多くの同時接続を持つことには多くの利点があります。以前は、私のコードは、ダウンロードする項目の配列から始まり、それらすべてを順番に要求していました。これは、同時実行の利点を妨げています。また、通知を使用してネットワーク接続をキャンセルしています。これで、このプロジェクトでオペレーションを通じてそれを行うことができます。優先度とカテゴリの値を使用するように設定して、ダウンロードの優先順位付けと並べ替えを行い、オペレーションのカテゴリをキャンセルできるようにしました。ビューごとにカテゴリを使用することを選択できます。ユーザーがビューを離れると、そのビューのすべての操作がカテゴリを使用してキャンセルされます。これにより、アクティブ ビューのリソースが解放されます。

より多くの同時操作を使用する際の懸念事項の 1 つは、CPU 使用率と I/O ですが、iOS でこれらの値を測定する方法を知りません。CPU 使用率を表示する iOS の「w」コマンドに相当するものが役立つ場合があります。I/O についてはそれほど心配していませんが、それを測定するとより包括的になります。

ネットワーキングのやり方に関する私の主な問題は、レスポンシブ UI でした。私がやっていることがUIを遅くしていることがわかりました。この新しいアプローチは大いに役立つかもしれませんが、同時操作の数を抑えた場合に限ります。最適な操作数は、接続の種類 (3G、WiFi など) によって異なる場合があるため、接続の種類を確認すると、最適化につながる場合があります。

アプリでネットワーク通信を高速化するためのより良い方法に興味がある場合は、このサンプル プロジェクトを試して、パフォーマンスを測定できる他の方法を提案し、通信をさらに最適化する方法を提案してください。(また、Apple サンプル プロジェクト MVCNetworking と ASIHTTPRequest プロジェクトを参照していることにも注意してください。

次に私ができることは、ダウンロードされたデータの量を合計し、ダウンロードを完了するまでの合計時間とともにその量のログを保持することです。

README ファイルは、プロジェクトとその仕組みを説明するのに役立ちます。

4

1 に答える 1

3

これが役立つ場合、Mugunth Kumarは、MKNetworkKitでNSOperationQueueの最大接続サイズを設定する前に、到達可能性クラスを使用して接続のタイプを実際にチェックします

于 2012-07-19T20:10:10.380 に答える