1

私のアプリでは、リクエストからデータをダウンロードし、解析して配列に追加する複数の異なるメソッドをすべて異なるスレッドで実行しています。これらのメソッドのほとんどは、1 つの要求からデータをダウンロードしますが、メソッドではforループを使用して 30 を超える翻訳をダウンロードします。

しかし、これは悪いユーザー エクスペリエンスをもたらします。ユーザーは糸車を見て、ランダムに生成されたばかげた失速テキストを読まなければなりません。

そこで私が知りたいのは、どのようにして同期リクエスト ( NSURLConnection) をより速くすることができるかということです。これは最良の手法ですか? 非常に多くのリクエストを行っているため、すぐに非同期に切り替える必要がありますか? 非同期とはどういう意味ですか?このシナリオで役立ちますか?

すべてを完了するために、アプリは Wi-Fi で最大 7 秒、3G で最も遅い 30 秒かかります (ただし、帯域幅が最悪のシンガポールでは!)

では、改善するには?メソッド、テクニック、API、助けてください!

ありがとう!

4

2 に答える 2

3

同期と非同期を使用しても、速度はまったく影響を受けません。インターネットの速度はどちらの方法でも同じです。

問題は、メインスレッドで同期ネットワーク呼び出しを絶対に行わないようにする必要があることです。これを行うと、ユーザーインターフェイスがロックされます。最良のケースは、アプリがユーザーにロックされているように見えることです(悪い)。最悪の場合、OSは応答しない(悪い)ためにアプリを強制終了します。

すべてのネットワーキングはバックグラウンドで実行する必要があります。

すべてのネットワークアクセスが完了するまでアプリが実際に続行できない場合は、少なくとも「ビジー」画面を表示して、ユーザーに何が起こっているかを知らせることができます。おそらく、プログレスバーを使用して、プロセスの進行状況をユーザーに知らせたり、ファイル数の「xofy」カウントを表示したりします。アプリに適したものは何でも。

ただし、ネットワークアクセスの速度は変更されません。より良いユーザーエクスペリエンスを提供します。

非同期ファイルのダウンロードを行う方法については、ここに多くの質問があります。多くのNSURLConnection人がサードパーティのライブラリを使用しており、他の人はあなたが何をしているかによっては簡単になるかもしれません。少し検索します。これに関連する質問としていくつかリストされています。

于 2012-11-14T00:21:17.533 に答える
3

これを修正する最善の方法は、非同期呼び出しです。速度を超えて、可能な限り同期リクエストの使用を避ける必要があります。基本的に、同期を使用しているが別のスレッドを使用している場合、非同期で既に行われている作業を行っています。設定するのは手間がかかりますが、すべての同期リクエストを同時に送信し、異なる時間に完了することができます。同時に送信できる HTTP リクエストの数には制限がありますが、iOS がこれを制限するため、大幅なパフォーマンスの向上が見られるはずです。

于 2012-11-13T23:54:18.277 に答える