PHPはファイルを処理するときにコードを送信しますか、HTMLレスポンス全体を構成して送信しますか?例えば、高価なPHP関数をサーバ上のファイルフッタに移動させることに違いはありますか?PHPコードがヘッダーかフッターにあるかどうかは重要ですか?
さらに、Transfer-Encoding: chunked
を使用していた場合は違いがありますか?
PHPはファイルを処理するときにコードを送信しますか、HTMLレスポンス全体を構成して送信しますか?例えば、高価なPHP関数をサーバ上のファイルフッタに移動させることに違いはありますか?PHPコードがヘッダーかフッターにあるかどうかは重要ですか?
さらに、Transfer-Encoding: chunked
を使用していた場合は違いがありますか?
最終的には、それに依存します。私が使用したほとんどのPHPホスティングメカニズムは、スクリプトから受け取ったようにチャンクで応答をストリーミングし、Content-Length
ヘッダーを完全に省略します(これは事前にわかっていないため)。 flush()
を使用してレスポンスを定期的にフラッシュして、これまでクライアントがバッファした内容をサーバーに送信させることができます。
あなたは時間がかかり、ページをあらかじめレンダリングできるようにする場合、これを行う適切な方法はできるだけ多くのページを出力することですflush()
をダウンロードし、高価な作業をしてください。宣言された最大PHPスクリプトの長さよりも長くかかることはないようにしてください。
さて、その説明は明らかにビットが単純化されるように:
Content-Length
ヘッダが実際にいくつかの状況下で送信されてもよいです。たとえば、スクリプトの応答が送信されたデータのPHPのバッファよりも小さい場合や、スクリプトの実行に一定の時間がかかる場合、サーバーはコンテンツの長さを正確に認識し、長さヘッダを追加できます。
さらに、flush()
は実際には何もしません。これは、サーバーの構成やその他の要因によって異なります。サーバーサイドの動作に関するドキュメントの次の警告に特に注意してください。
flush()は、Webサーバーのバッファリングスキームをオーバーライドできない可能性があり、ブラウザのクライアント側のバッファリングに影響しません。また、PHPのユーザ空間出力バッファリング機構にも影響しません。つまり、ob出力バッファを使用している場合は、ob_flush()とflush()の両方を呼び出してob出力バッファをフラッシュする必要があります。
特にWin32上のいくつかのサーバーは、結果をブラウザに送信する前に終了するまで、スクリプトからの出力をバッファします。
mod_gzipのようなApache用のサーバーモジュールは、flush()がクライアントにすぐにデータを送信しない原因となる独自のバッファリングを行うことがあります。
つまり、テスト、テスト、テスト。 Webサーバが達成しようとしている動作に干渉していないことを確認してください。必要に応じてWebサーバーを再構成します。
偉大な答え、ありがとう! –