これについて2週間頭を悩ませています。どんな助けでも大歓迎です。
問題:
NSURLConnection を使用して、RESTfull Web サービスから JSON データを取得しています。要件は、データの遅延読み込みを実行できないことです。ログインしたユーザーがアプリを開くたびに、アプリの最初の画面で処理する必要があるのは、1 つの大きなデータ チャンクです。賢明なことではないことはわかっていますが、仕方がありません。キャッシュは、ローカルの Sqlite DB で行われています。パフォーマンスに一定の 3 ~ 4 秒のヒットを与えている Async NSURLConnection を使用しています。
Sync NSURLConnection を試してみたところ、Async NSURLConnection が同じリクエストを処理するのに約 3 ~ 4 秒余分にかかっていることがわかりました。しかし、Sync NSURLConnection はまったく信頼できません。完全な JSON の取得に半分以上失敗します。また、Sync NSURLConnection と NSOperation の組み合わせは役に立ちません。
特定のリクエストのパフォーマンスを観察するためだけに別のアプリで呼び出しを行ってみましたが、それでも同じ結果が得られました。
そのため、現在、完全なリクエストの平均実行時間は約 6 ~ 8 秒です。アプリの最初の画面で私はかなり高いと感じています. (それがあまりない場合はお知らせください。ユーザーエクスペリエンスが悪いように感じます)。
質問:
NSURLConnection は、このようなリクエストを行うための標準的な方法ではありませんか?
NSURLConnection とは別に、これを行うためのより良い、より高速な (信頼できる) 方法はありますか?
NSURLConnection のパフォーマンスを最適化できますか? はいの場合は、正しい方向に向けてください。
誰もCFHTTPStreamを試しましたか? はいの場合、パフォーマンスの点で NSURLConenction よりも優れていますか?
ありがとう
@GoZoner 返信ありがとうございます。以下の3つの方法でテストしました
これはアプリの最初の画面であるため、アプリが他のことをしている実際のケースはありませんが、それでも結果は異なり、非同期で一貫して 3 ~ 4 秒の損失が発生しました。
別のテスト アプリで raw 呼び出しを行いましたが、その 1 つの Web サービス呼び出しだけで、結果は同じでした。
デバイスとシミュレーターでテストしました。デバイスでは、予想どおり結果が悪化し、Async NSURLConnection 呼び出しで約 4 秒の一定の遅延が発生しました。
また、Sync NSURLConnection が信頼できないことはほとんど意味がないため、信頼性の問題にも驚きました。しかし、テストを何度も実行した後、NSURLConnection ライブラリの何かが原因ではなく、3G または Wi-fi 接続が信頼できないため、実際には信頼できないことがわかりました。私の推測)。この特定の問題は、受信したデータが完了するまでデータを呼び出して追加し続けるため、Async NSURLConnection によって美しく処理されます (JSON を完成させるためにデータを追加するのに 10 ~ 12 回以上の試行が必要になる場合があります)。Sync NSURLConenction はデータの取得を 1 回しか試行しないため、信頼性の低いモバイル ネットワーク接続では惨めに失敗します。
@Andrea応答ありがとう:)きっとYAJLにスピンを与えるでしょう。しかし、問題はJSONの解析ではなく接続にあると思います.私は間違っているかもしれません. YAJL には信頼できる接続処理メカニズムがありますか?
より多くの回答をお待ちしております。あなたの提案やコメントは実際には非常に貴重です:)
ありがとう