啟用 Apache 模組時 TTFB 慢
我最近遇到了一個我仍然無法克服的問題。
所以,我有一個用 WordPress 編寫的市場。在開發過程之後,我嘗試優化速度,因為網站天生會載入很多資源。
我用過
WpFastestCache
,它為我生成了 .htaccess。問題是這樣的:
- 當
mod_deflate
和mod_expires
啟用時,我得到一個非常簡潔的資源載入時間,但是一個巨大的(大約 10 秒!)TTFB。當
mod_deflate
和mod_expires
被禁用時,TTFB 幾乎沒有下降,但我得到了巨大的資源載入時間。這是常見的還是獨特的情況?
鑑於您在啟用壓縮和禁用壓縮時都有問題,聽起來問題的根本原因不是壓縮,而是其他地方。
您解釋了啟用/禁用壓縮時症狀如何變化。然而,症狀的變化只是很小的變化,而這種變化是您對大多數壓縮方案的預期。
當您禁用壓縮時,您會看到響應的第一部分快速生成。完全有可能快速生成的響應部分是具有獨立於使用者數據的靜態內容的標頭,這可能就是它生成如此之快的原因。有問題的部分是數據源需要很長時間才能產生其餘的輸出。
一旦引入壓縮,症狀就會改變。可能標頭數據會很快傳遞給壓縮程式碼,但為了提高性能,壓縮程式碼將等待更多數據,然後再將數據發送給客戶端。因此,少量數據將在該緩衝區中停留一段時間。
一些 API 允許生成數據的程式碼指示壓縮程式碼刷新緩衝數據,如果在此處使用,可能會使症狀看起來與未壓縮設置中的相同。但是,如果到目前為止生成的數據本身沒有用,那麼刷新緩衝區是不值得的。
您應該研究的是為什麼在發送最後一個字節之前需要這麼長時間。我猜如果您嘗試測量最後一個字節的時間,無論有沒有壓縮,它都會大致相同。
伺服器的負載如何?
如果伺服器上的負載很高,則可能表明它正忙於執行 CPU 密集型任務以對其接收的請求產生響應。它還可能表明伺服器需要大量 I/O(通常可以通過添加更多 RAM 來減少)。
如果伺服器上的負載很低並且仍然響應緩慢,則通常表明它正在等待與另一台伺服器的網路通信(可能是 DB 或 DNS 伺服器響應緩慢)。它還可能指示程式碼中某處的錯誤。
如果您無法從伺服器負載、網路流量檢查或日誌文件中推斷出導致緩慢的原因,您可能需要向您的應用程序添加更多日誌記錄,以便了解它在這麼長時間內都在做什麼。