8

サーバーのメモリを含めてパフォーマンスが重要な場合、ob_start(); のような出力バッファリングを使用するかどうかに興味があります。PHPでは、それを使用しないことでパフォーマンスが低下しますか? それを使用するために、より多くのメモリまたは何かを使用しますか?

memcache と APC と他のすべてのサーバー アクティビティに使用できるすべてのメモリが必要なトラフィックの多いサイトでの私の状況では、それを使用するかどうかに興味があります。ページのリダイレクト、ヘッダーの送信 ヘッダーが既に送信された後に言う必要があります。私のサイトにはヘッダー、本文、フッターファイルが設定されているため、本文ファイルの内容に応じてリダイレクトする必要がある場合があるため、ヘッダーが既に表示されている場合はその画面出力バッファリングを使用することは1つの解決策ですが、他の解決策があるので、パフォーマンスに興味があります

4

2 に答える 2

4

出力バッファリングが役立つ理由は 2 つあります。

  1. パフォーマンスのために、エコーするたびにネットワークソケットが利用可能になるのを待つ必要はありません。
  2. ヘッダーの送信が早すぎるのを避けるため。コンテンツをブラウザに送信したら、ヘッダーも送信する必要があります。送信後は、Cookie を設定したり、コンテンツ タイプを変更したりする場合などにヘッダーを変更することはできません。

もちろん、リクエストが終了するまですべてをメモリに保存するというペナルティがあります。これは通常、PHP プロセスの全体的なサイズに比べて非常に小さいはずです。つまり、大規模なファイルをネットワークに送信する予定がない限りです。その場合は、ob_flush() と flush() を使用して定期的にバッファをフラッシュ (または一時的にバッファを完全に無効化) して、使用されるピーク メモリを減らすことができます。

私の意見では、あなたは常にそれを持っていて、例外的にそれを取り除くべきです.

于 2009-10-01T11:50:38.050 に答える
3

トラフィックの多いサイトで使用するか、少なくとも暗黙的なフラッシュをオフにして、ネットワーク経由で部分的な応答を送信しないようにするのが最善だと思います。受信者も非常に遅い場合、スクリプトの残りの部分が遅くなる可能性があるためです。

応答全体を 1 回で送信することにより、php スクリプトによって使用されるすべてのリソースが解放されるため、より効率的になります。

于 2009-10-01T09:53:17.683 に答える