2009-04-13 68 views
4

我對php緩衝如何工作感到困惑。使用Apache和MySQL進行php輸出緩衝的性能影響

比方說,您有一個php頁面foo.phpoutput_buffering = 4096php.ini,並且Apache收到foo.php的獲取請求。 foo.php開始執行,並且一旦準備好4096個字節,它們就會發送到Apache。 Apache開始將這些4096字節發送給客戶端。

以下是我不明白的內容:當發送一些令人討厭的跟蹤器標註,JavaScript或發送給瀏覽器的圖像時會發生什麼情況。瀏覽器被掛斷了,並沒有和Apache談一段時間,而是堅持下來。 Apache不會發布MySQL線程,它顯示爲「睡眠者」。這是正確的還是我完全脫離了這裏?

回答

2

瀏覽器不會因爲從服務器下載HTML數據而'掛斷'。它會繼續下載整個頁面,即使它正在等待JavaScript文件下來,然後纔會顯示任何內容。

當然,如果瀏覽器/服務器連接由於某種原因而中斷,您可以讓Apache等待ACK直到連接超時,但這不是常見的情況。

4

你完全關閉基地:)

時,有一個一些討厭的跟蹤標註會發生什麼,一個 JavaScript或已發送給瀏覽器

圖像這不是會影響服務器端的任何事情。

通過PHP運行每個請求都將

  1. 編譯所需的PHP文件選擇加入代碼(除非高速緩存是一個)
  2. 執行PHP停用代碼
  3. 返回的字符串結果PHP選擇代碼到瀏覽器

您正在討論的緩衝發生在第2步和第3步之間。所以,讓我們來看看您的場景。

  1. 請給一個PHP的網址是由
  2. 選入代碼被編譯
  3. PHP開始執行,並開始返回HTML字符串
  4. 一個緩慢的加載img標籤的字符串創建
    • PHP繼續給apache輸出
    • 一個單獨的http請求是爲圖像(或javascript代碼,或其他等)製作的

這是單獨的請求,在這裏是無能爲力。所有PHP和Apache正在將HTML返回給瀏覽器。這個HTML可能會生成一個img或javasript標記,將回調到同一個web服務器,但這些請求將與爲現有頁面生成HTML的請求分開處理。