2009-10-01 75 views
7

當性能很重要(包括服務器內存)時,我很好奇如果使用輸出緩衝 (如ob_start();在PHP有任何性能命中不使用它?它使用更多的內存或任何東西來使用它?PHP中的輸出緩衝需要更多資源嗎?

在我需要所有內存的高流量網站上,我可以用於memcache和APC以及所有其他服務器活動,我只是好奇我是否應該使用它,唯一真正的原因是它派上用場對我來說是重定向頁面,發送標題我應該說,標題已發送後,我的網站有標題,正文,頁腳文件設置,所以有時我需要重定向取決於什麼是正文文件,所以如果標題已經顯示離子屏幕,產生了一個問題,使用輸出緩衝是1個解決方案,但也有其他的解決方案,因此只是好奇的性能

回答

1

我認爲這是最好的高流量的網站使用它,或者至少把隱含沖洗掉,以避免通過網絡發送部分響應,因爲它可能會減慢速度如果接收器的速度太慢,那麼腳本的其餘部分也是如此。

通過發送一次整個響應,您釋放由PHP腳本中使用的所有資源,所以它的效率更高。

+0

我只是讀abit abt PHP輸出緩衝區也。我想這將需要服務器內存來存儲整個頁面B4發送出去,作爲一個正確的?所以有可能它會比不使用緩衝使用更多的內存? – iceangel89 2009-10-01 10:03:11

+0

@ iceangel89那是我最初的問題,什麼我真的想找出 – JasonDavis 2009-10-01 10:27:03

+0

對不起,我忘了提及這一點......我想用gzhandler壓縮時輸出緩衝的開銷是非常重要的。對於簡單的緩衝,它將所有內容都存儲在內存中,但我認爲你不會看到巨大的差異(大的html頁面不會超過200K,是嗎?)。您可以使用memory_get_usage()輕鬆測試該輸出是否帶有輸出緩衝。 – 2009-10-01 12:41:34

3

有兩個原因,這樣你就不會 等待網絡插座是 可每次回波時輸出緩衝是非常有用的

  1. 由於性能。
  2. 爲了避免過於 早發送頭。一旦你已經派了一些 內容到瀏覽器的標題 也必須發送,畢竟這是再 做你無法修改它們 例如如果你想設置一個cookie或者更改內容類型。

當然存在將所有內容存儲在內存中直到請求結束的懲罰。與PHP過程的整體大小相比,這通常應該很小。也就是說,除非你打算髮送大量文件。如果是這種情況,您可以定期使用ob_flush()和flush()(或暫時禁用緩衝區)來刷新緩衝區,以減少使用的峯值內存。

在我看來,你應該有它在所有的時間和在特殊情況下將其刪除。