53

WWDC 2012 セッション 706 - Networking Best Practicesでは、 HTTP パイプラインについて説明しています。

  • デフォルトでは、iOSでは無効になっています
  • 話の中で、それは大きなパフォーマンスの勝利であると説明されています。

なぜあなたはそれを使いたくないのですか?

パイプライン

4

1 に答える 1

84

実装のバグ

パイプライン処理が機能するには、要求された順序で応答が返される必要があります。単純なサーバー実装は、計算が完了するとすぐに応答を送信するだけかもしれません。複数の要求が並行して送信され、最初の要求の処理に時間がかかる場合 (たとえば、より大きな画像の処理)、応答は順不同になります。

HTTP はステートレス プロトコルであるため、これはクライアントにとって問題であり、クライアントには要求と応答を一致させる方法がありません。応答が返された順序に依存しています。

サーバーは、要求が受信されたのと同じ順序で、それらの要求に応答を送信する必要があります。

パフォーマンスの問題

サーバーがパイプライン処理を適切にサポートしている場合でも、後続のすべての要求が最初の要求が完了するまで待機する必要があるため (Head of Line ブロッキング)、パフォーマンスの問題が発生する可能性があります。

  • この記事では、特定の状況でのパフォーマンスの低下と、サービス拒否攻撃の可能性について説明しています。

  • この記事はまた、パイプライン処理が大成功ではないことも示唆しています。

  • WWDC 2015 - Networking with NSURLSessionは、行頭ブロッキングについて非常によく説明しています。(解決策は、優先順位をサポートする HTTP 2 に切り替えることです)

行頭ブロッキング

要約すると、HTTP パイプラインの問題は次のとおりです。

  • 一部のサーバーとほとんどのプロキシはサポートしていません。(おそらく、セキュリティ/信頼性/またはパフォーマンスの問題のため)
  • 一部のサーバーはこれを正しくサポートしていないため、クライアントのバグにつながる可能性があります。
  • それは必ずしもパフォーマンスの勝利ではありません。
  • ヘッド オブ ライン ブロッキングの影響を受けやすい
于 2013-02-11T13:32:17.800 に答える