2009-10-01 23 views
7

サーバのメモリを含むパフォーマンスが重要な場合、出力バッファリングを使用すると、ob_start();のような を使用するのが奇妙です。 PHPでそれを使用していない以上のパフォーマンスヒットがありますか?それはそれを使用するために、より多くのメモリまたは何かを使用していますか?PHPでの出力バッファリングにはより多くのリソースが必要ですか?

私の状況では、MemcacheとAPCと他のすべてのサーバーのアクティビティに必要なすべてのメモリが必要ですが、私はそれを使用すべきかどうかは不思議です。それは便利な唯一の本当の理由です私はページをリダイレクトするためのもので、ヘッダーを送信した後、私のサイトにはヘッダー、ボディ、フッターファイルの設定があるので、ヘッダーを送信しているので、いつかは本体ファイルの内容に応じてリダイレクトする必要があります。表示されたイオンスクリーンは問題を生み出しますが、出力バッファリングは1つの解決策ですが、他の解決方法がありますので、パフォーマンスについて興味があります。

答えて

1

トラフィックの多いサイトで使用するか、少なくとも暗黙のフラッシュをオフにすることをお勧めします。ネットワークを介して部分的な応答を送信しないようにします。受信者が非常に遅い場合は、スクリプトの残りの部分。

一度にすべての応答を送信すると、PHPスクリプトで使用されるすべてのリソースが解放されるため、より効率的です。

+0

私はちょうどabit abt PHP出力バッファも読んでいます。私はそれが1ページの権利としてそれを送信するページ全体を格納するためにサーバーのメモリを必要と考えていますか?バッファリングなしの場合よりも多くのメモリを使用する可能性があります。 – iceangel89

+0

@ iceangel89これは私の最初の心配でしたが、私が本当に知りたいのは – JasonDavis

+0

残念ですが、この点については忘れました...圧縮のためにgzhandlerを使用する場合、出力バッファリングのオーバーヘッドが重要だと思います。単純なバッファリングのために、すべてをメモリに格納しますが、大きな違いは見られません(大きなHTMLページは200Kを超えていませんか?)。 memory_get_usage()を使用して、出力バッファリングの有無を簡単にテストできます。 –

3

あなたがネットワークソケットを使用して、各エコー時間 利用できるようにするのを待っ じゃないので、出力バッファリングはパフォーマンスのために

  1. に有用である理由は2つある。
  2. ヘッダーの送信を避けるには、早めに を送信してください。 コンテンツをブラウザに送信した後は、 の後に というヘッダーを送信する必要があります。その後、 を行った後に変更することはできません。 クッキーを設定する場合は コンテンツタイプを変更してください。

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

私の意見では、例外的な場合にはいつでも削除してください。

関連する問題