1. 程式人生 > >關於伺服器效能優化

關於伺服器效能優化

前幾天客戶反映網站訪問速度很慢,由於伺服器是放置在香港,在大陸某些地區訪問確實有速度慢的硬傷。 想了很多辦法優化檔案大小,用了幾個晚上改程式碼,將資料量減少到了極限,效果仍然不是很好。 後來突然想到gzip,會不會是gzip沒開啟?當時比較著急,瞅了一眼network看到有gzip字樣,但是檔案大小仍舊徘徊在1M。又想到用國內伺服器中轉。最後折騰了一上午,突然發現是response用了gzip,request上根本沒有! 差點氣的把眼鏡摔了… 趕緊把Apache的gzip模組開啟,1級壓縮。1M JS瞬間減少到100K。 如何在 apache 中開啟 gzip 壓縮服務 伺服器設定 gzip 壓縮是 web 開發裡很普遍的做法。假設你要請求一個 100k 的檔案,網路傳輸速度為 50k/s,需要 2s 才能得到資料,但是如果在伺服器設定了 gzip 壓縮,將服務端的檔案壓縮到了 50k(實際上的壓縮率往往小於 50%),這時候只需 1s 就能得到資料,然後在客戶端解壓即可。

可以對比下同一個檔案在開啟 gzip 前後的大小。

gzip 壓縮前:

gzip 壓縮後:

那麼如何在服務端開啟 gzip 服務呢?這裡以 apache 為例簡單介紹下。

開啟 apache 的 “httpd.conf” 檔案,比如我的是在 “C:\wamp\bin\apache\Apache2.2.21\conf” 目錄下。找到以下這一行,將它前面的註釋(#)去掉:

複製程式碼 LoadModule deflate_module modules/mod_deflate.so 很多參考檔案都提到同時要對 LoadModule headers_module modules/mod_headers.so 去掉註釋,說 “如果不開啟這個,那網站就不能正常顯示了” ,不過我在測試過程中沒有去掉也沒有問題。

接著再添上以下程式碼:

複製程式碼

告訴 apache 對傳輸到瀏覽器的內容進行壓縮

SetOutputFilter DEFLATE

壓縮等級 9

DeflateCompressionLevel 9 這樣就能對所有檔案進行 gzip 壓縮了。壓縮等級是個 1-9 之間的整數,取值範圍在 1(最低) 到 9(最高)之間,不建議設定太高,雖然有很高的壓縮率,但是佔用更多的CPU資源。(本地測試了下 1 和 9 壓縮率差不了多少…)

實際開發中我們並不需要對所有檔案進行壓縮,比如我們無需對圖片檔案進行 gzip 壓縮,因為圖片檔案(一般為 jpg、png等格式)本身已經壓縮過了,再進行 gzip 壓縮可能會適得其反(詳見 圖片要啟用gzip壓縮嗎?絕對不要!,背景圖片千萬不要gzip壓縮,尤其是PNG),類似的還有 PDF 以及音樂檔案。所以我們可以設定過濾指定檔案或者對指定檔案進行壓縮。

比如我們要對圖片等特殊檔案不進行 gzip 壓縮處理:

複製程式碼

告訴 apache 對傳輸到瀏覽器的內容進行壓縮

SetOutputFilter DEFLATE

壓縮等級 9

DeflateCompressionLevel 9 #設定不對字尾gif,jpg,jpeg,png的圖片檔案進行壓縮 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary 或者指定檔案格式進行壓縮:

複製程式碼

壓縮等級 9

DeflateCompressionLevel 9

壓縮型別 html、xml、php、css、js

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php AddOutputFilter DEFLATE js css 修改好後,儲存 httpd.conf 檔案,記得重啟 apache,再重新整理瀏覽器看請求,應該已經生效了!