Http gzip 壓縮和性能
我一直嘗試在 Web 伺服器上啟用 gzip 壓縮,因為它似乎具有非常低的 CPU 成本,並且您可以顯著減少數據傳輸。
現在我有一個沒有啟用 gzip 的公共伺服器,有時它的 CPU 負載在大流量下相當高(主要是因為某些頁面上的複雜 SQL 查詢)並且閱讀這篇關於啟用主題的 Microsoft 文章,應該考慮 CPU 負載啟用 gzip 時的帳戶。
客戶端希望減少頻寬並加快頁面載入時間,但我不確定啟用 gzip 弊大於利,儘管它在其他伺服器上執行良好。
根據您的經驗,gzip 壓縮會對 CPU 負載產生重大影響嗎?
編輯:在這種情況下,我們使用的是 IIS6
關鍵問題是“壓縮了多少數據?”。
如果您正在執行一個需要大量秒數才能執行的海量數據庫查詢,並且生成的頁面有幾十 Kb 長,那麼壓縮數據的費用將與 SQL 工作的費用相形見絀。甚至沒有任何意義的地方去想它。與任何大塊數據庫查詢相比,現代 CPU 幾乎可以立即壓縮數十或數百 Kb。
另一個支持壓縮的因素是,如果配置正確,靜態頁面不會在每個請求上重新壓縮,並且不會受益的對象(圖像文件和其他預壓縮的)根本不會被 Web 伺服器壓縮。只有動態的可能可壓縮的內容需要在每個請求上進行 gzip 壓縮。
一般來說,除非您有特定的理由不*壓縮,否則我建議您這樣做。*CPU 成本通常很小,除非您出於某種原因在低功耗設備(例如家用路由器)上執行 Web 伺服器。不進行壓縮的一個原因是使用“長輪詢”技術來有效模擬伺服器推送的腳本或將內容滴灌到瀏覽器以指示進度的腳本 - 動態壓縮隱含的緩衝可能會導致此類請求在客戶端超時側,但通過仔細配置,您可以將它們添加到“不壓縮”列表中,同時仍然壓縮其他所有內容。考慮不使用動態壓縮的另一個原因是它確實為每個動態請求增加了一點延遲,儘管對於大多數 Web 應用程序而言,與節省的頻寬相比,這種差異完全可以忽略不計。
由於 SQL 查詢導致的 CPU 負載的旁注:這意味著您用於這些查詢的工作數據集足夠小以適合 RAM(否則您的性能將受 I/O 限製而不是 CPU 限制),這是一件好事( Tm值)。正如您所懷疑的那樣,高 CPU 負載可能只是由於並發查詢的數量過多,但也可能是其中一些是 SQL 分配的 RAM 和/或作業系統記憶體中的表掃描對象(或者它們不是做他們的工作很長的路要走)所以可能值得記錄長時間執行的查詢並檢查是否有任何索引改進或其他優化可以用來減少他們操作的工作集。