2

私の目標は、php スクリプトがページの残りの部分をつなぎ合わせて、完了したら送信している間に、Web サイトのヘッダー部分を早期にフラッシュすることです。重要なのは、チャンクが圧縮されてブラウザーに送信されることです。(Apache/2.2 と PHP/5.3.4 を使用しています)

現在、PHP スクリプトで ini_set("zlib.output_compression", "On") を呼び出してこれを達成しようとしています。しかし、最後でもスクリプトのどこかで flush() を使用すると、圧縮は機能しなくなります。

質問は次のとおりです。

a) このメソッドを使用すると、zlib は出力バッファーをフラッシュし、この出力バッファーのサイズに達すると、圧縮されたチャンクをブラウザーに送信しますか?

b)そうであれば、zlibの内部バッファサイズを設定するだけでなく、zlipがチャンクを送信するタイミングを微調整する方法はありますか? デフォルトは 4KB です。

c) 初期の圧縮フラッシュを達成するための良い代替手段はありますか? 多分私は完全に間違った道を進んでいます:)

4

1 に答える 1

1

OB で zlib 圧縮を使用しなければならなかったのは久しぶりです (理由については後で詳しく説明します)。ただし、PHP の OB で zlib 圧縮をオフにするように説得させてください。まず第一に、私たちが同じページにいることを確認するための簡単な背景.

OBはどのように機能しますか

php が何かを出力するたびに、OB がなければ、Apache に直接送信され、Apache からブラウザに送信されます。代わりに、OB を使用すると、出力は apache で停止し、データが (ブラウザに) フラッシュされるか、スクリプトが終了してデータが自動的にフラッシュされるまで待機します。これにより、プロセスの Apache から Web ブラウザへの段階をバッファリングすることで、ページを生成する際の時間とリソースを大幅に節約できます。

PHP で OB 圧縮を使用しない理由

なぜPHPに圧縮させるのですか? そのようなタスクを実行するのはサーバーの仕事です(たとえば、jsファイルを圧縮するだけでなく)。PHP を処理するために Apache を大幅に解放するために「すべき」ことは、NGINX を一般向けにインストールすることです。リバース プロキシとして設定するのは非常に簡単で、php や apache と同じサーバーにインストールすることもできます。

したがって、ポート 80 に NGINX を設定し、Apache を 8080 に設定します (nginx の接続のみを許可しますが、既に公開されており、nginx をバイパスするためのデバッグに最適であるため、しばらくの間公開したままにしても心配しないでください。したがって、セキュリティの問題はありません)。上昇するはずですが、長期間公開しないことをお勧めします)。次に、nginx リバース プロキシを apache に作成し、apache からオフロードするすべての静的ファイルをキャッシュします (nginx が代わりにそれらを提供するため)。つまり、apache はより多くの php リクエストを実行でき、nginx に OUTPUT COMPRESSION を実行させることもできます;) apache と php を解放して、より多くの要求。追加の利点として、nginx は Apache よりもはるかに高速に静的ファイルを提供することもでき、Nginx は RAM の使用量がはるかに少なく、より多くの接続を処理できます。

nginx の初心者でも、オンラインでいくつかのチュートリアルを読んだ後に nginx のセットアップを取得し、今述べたすべてを 1 日以内に完了することができました。1日もよく過ごしました。

ただし、PHP から Apache への出力バッファリングを ON のままにしておくことを忘れないでください。ただし、PHP では zlib 圧縮を OFF にし、代わりに nginx では有効にします。

于 2012-10-25T18:30:48.813 に答える