1

私がやっていることは、さまざまなデータベースで記事を検索するために API をクエリしていることです。複数のステップが関係しており、それぞれが json オブジェクトを返します。各ステップには、API へのさまざまなクエリ文字列を持つ NSUrlConnection が含まれます

ステップ 1: クエリとレコード セット ID のステータスを示す json オブジェクトを返します。

ステップ 2: ステップ 1 からレコード セット ID を取得し、クエリに有効なデータベースのリストを返します。

ステップ 3: ステップ 2 で準備が整った各データベースに対してクエリを実行し、結果を含む json データ配列を取得します

私はこれについて最善の方法について混乱しています。1 つの nsurlconnection を使用して、現在のステップに基づいて接続の接続を再度開く方が良いですか? または、後続の各接続の最後に新しい接続を開く方が良いですか?

4

2 に答える 2

1

最初の接続を破棄し、接続ごとに新しい接続を作成します。

ただ、理由は聞かないでください。

ところで、これがテーブルやアニメーションのスクロールなどのパフォーマンスに敏感なコンテキストでの新しいオブジェクトの再利用と作成に関するものなのか、それとも約1万回の反復で発生するのかという質問を理解できます。しかし、あなたは新しいオブジェクトを作成するか、古いオブジェクトを再利用するために 3 つのオブジェクトについて話しているのです。それについて考えるだけで何の利益がありますか?

于 2013-07-14T19:30:23.593 に答える
1

いくつかの観察

  1. ネットワーク遅延:

    ここで注意を払う必要がある重要な現象 (そして、あなたのように聞こえます) は、ネットワークの遅延です。アイデアのシナリオ (高速インターネット アクセスを備えたシミュレーター、または Wi-Fi に接続されたデバイス) でアプリをテストすることがよくあります。ただし、実際のシナリオでアプリを使用する場合、ネットワークの待ち時間がパフォーマンスに深刻な影響を与える可能性があるため、これを最小限に抑えるソリューションを構築する必要があります。

  2. 次善の現実世界のネットワーク状況のシミュレーション:

    ちなみに、まだ行っていない場合は、「ハードウェア IO ツール」の一部である「ネットワーク リンク コンディショナー」をインストールすることをお勧めします (「Xcode」メニューから「開発者ツールを開く」を選択します)。 - 「その他の開発者ツール」)。「ネットワーク リンク コンディショナー」をインストールすると、シミュレーターでさまざまなネットワーク エクスペリエンスをシミュレートできます (例: 3G 接続が良好、エッジ接続が不良など)。

  3. ネットワーク リクエストを最小限に抑えます。

    とにかく、前のリクエストに依存する個別のリクエストを最小限に抑える方法を見つけようと思います。たとえば、ステップ 1 とステップ 2 を見て、これら 2 つを 1 つの JSON リクエストにマージできないかと考えています。おそらくそれは不可能ですが、うまくいけば、アイデアが得られます。連続して発生する必要がある個別のリクエストの数を減らしたい。

    ステップ 3 も見てみると、それらはステップ 2 に依存している必要があるように見えますが、おそらく、これらのステップ 3 のリクエストをいくつか同時に実行して、レイテンシの影響を減らすことができます。

  4. 実装:

    これをどのように実装するかという点では、私は個人的にNSOperationQueue、いくつかの合理的なmaxConcurrentOperationCount設定 (たとえば、4 または 5、同時実行性を享受して待ち時間を短縮するのに十分ですが、デバイスまたはサーバーに負担をかけるほど多くはありません) で同時実行を使用し、ネットワーク操作を送信します。 . この場合、おそらくステップ 1 を送信し、ステップ 2 を送信する完了操作を実行し、一連のステップ 3 要求を送信する完了操作を実行し、これらのステップ 3 要求が同時に実行される可能性があります。

    優れたネットワーク操作オブジェクトを作成する方法に関しては、適切なネットワーク操作オブジェクト (JSON を解析するものを含む) を既に持っているAFNetworkingのようなものを使用することをお勧めします。

    の再利用に関してはNSURLConnection、通常、リクエストごとに 1 つの接続です。サーバーとの長時間のメッセージ交換を必要とするアプリがある場合 (たとえば、チャット サービスなど、サーバーが必要なときにいつでもクライアントにメッセージを送信できるようにするチャットのようなサービス) 、ソケットの実装を行いましたが、ここでは適切なアーキテクチャではないようです。

于 2013-07-14T19:29:14.383 に答える