最近都沒有使用Gzip壓縮,是因為發現開啟這個壓縮也是有學問的。服務器上設置、WordPress站點上設置還是插件上設置讓我有所疑惑。通過幾天的研究學習,總結并分享下如何將 WordPress 站點開啟 Gzip 壓縮以達到加快傳輸的目的。
123456789 | gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 6;gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;gzip_vary on;gzip_proxied expired no-cache no-store private auth;gzip_disable "MSIE [1-6]/."; |
縉哥哥簡單解釋下,別問我為什么只解釋Nginx,因為我就用這個!
第1行:開啟Gzip(這是縉哥哥唯一不借助翻譯就能看得懂的)第2行:不壓縮臨界值,大于1K的才壓縮,一般不用改第3行:buffer,就是,嗯,算了不解釋了,不用改第4行:用了反向代理的話,末端通信是HTTP/1.0,有需求的應該也不用看我這科普文了;有這句的話注釋了就行了,默認是HTTP/1.1第5行:壓縮級別,1-10,數字越大壓縮的越好,時間也越長,看心情隨便改吧,縉哥哥用的是6.第6行:進行壓縮的文件類型,缺啥補啥就行了,JavaScript有兩種寫法,最好都寫上吧,總有人抱怨js文件沒有壓縮,其實多寫一種格式就行了。不過你要考慮自己的CDN之類的,如果靜態文件已經丟出去了,也就沒必要了!第7行:跟Squid等緩存服務有關,on的話會在Header里增加"Vary: Accept-Encoding",我不需要這玩意,自己對照情況看著辦吧第8行:IE6對Gzip不怎么友好,不給它Gzip了
值得一提的是,如果你是使用寶塔面板,那么它已經默認給你開啟了Gzip壓縮功能,如下圖所示:
首先確保你的 Apache 已經加載了 mod_deflate 模塊,然后在 httpd.conf 代碼中加載以下代碼:
123 | <IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/json application/x-httpd-php application/x-javascript</IfModule> |
如果你沒有權限修改你的主機,你也可以將以上代碼復制到網站根目錄的 .htaccess 文件。
如果修改 Apache httpd.conf 文件無效,則可以通過修改 PHP 的 php.ini 方法:
打開 PHP 目錄下的 php.ini 文件,找到 zlib.output_compression = Off
,改成 zlib.output_compression = On
,再把 ;zlib.output_compression_level
前面的;去掉,后面的-1改成1―9的值,1的壓縮比率最低,建議取5。這樣便可以實現所有 PHP 頁面的 gzip 效果。
如果無法修改 php.ini 文件,則可以在需要 gzip 壓縮的 PHP 文件頭部加入:
12345 | if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) { ob_start('ob_gzhandler');}else{ ob_start();} |
既可以實現該 php 頁面 gzip 壓縮。
如果上述方法都無效,則將下面的代碼復制到當前主題的 functions.php 文件中也可以實現 WordPress 整站 gzip 壓縮:
123456789 | //WordPress站點加速之開啟Gzip壓縮加快傳輸 - https://www.dujin.org/12613.htmladd_action('init', 'wpjam_gzip_compression');function wpjam_gzip_compression(){ if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) { ob_start('ob_gzhandler'); }else{ ob_start(); }} |
編輯站點根目錄 .htaccess 文件,在最后面加上一下三種代碼中的任意一種。
代碼一
1 | php_value output_handler ob_gzhandler |
代碼二
12345678910111213 | <IfModule mod_expires.c>ExpiresActive OnExpiresByType image/gif A2592000ExpiresByType image/jpeg A2592000ExpiresByType image/png A2592000ExpiresByType image/x-icon A2592000ExpiresByType application/x-javascript A604800ExpiresByType text/css A604800</IfModule><IfModule mod_deflate.c>SetOutputFilter DEFLATEAddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript</IfModule> |
代碼三
12 | php_flag zlib.output_compression Onphp_value zlib.output_compression_level 6 |
這里就有很多可以開啟Gzip的插件了,縉哥哥隨意舉幾個親自嘗試的例子,具體適用與否需要自己嘗試。
如果你的 WordPress 已安裝 WP Super Cache 緩存插件,可以在 WP Super Cache 設置 → 高級選項中勾選 Compress pages so they’re served more quickly to visitors.(Recommended) 一項,這樣也可以開啟Gzip壓縮,想必很多人都見過,縉哥哥就不截圖了!
如果你使用的是 WP Performance 插件,那就更簡單了,直接在插件設置主頁勾選
如果你使用的是 Gzippy 插件,啟動插件即可。
通過修改 WordPress 根目錄 index.php
文件開啟Gzip壓縮,這是縉哥哥認為最愚蠢的辦法!
為什么呢?眾所周知,WordPress的更新換代好比換內褲,三天兩頭更新。更新一次你就得改一次,你說是不是最愚蠢的辦法?但是,如果上方的你都不行的時候,倒是不妨使用這個方法試試!
進入 WordPress 網站根目錄,修改 index.php 文件,找到
1 | define(’WP_USE_THEMES’, true); |
在后面加上:
12 | //WordPress站點加速之開啟Gzip壓縮加快傳輸 - https://www.dujin.org/12613.htmlob_start(‘ob_gzhandler’) |
縉哥哥在上面加個地址,以免你忘了這句話什么意思。別忘了升級WordPress之后重新加回去!
如果在 .htaccess 文件中禁止了 Gzip 功能的話,那在 php.ini 文件中開啟后也需在 .htaccess 文件中開啟 Gzip,否則沒有效果。
開啟 WordPress 的 Gzip 功能后,服務器將在頁面傳輸前將頁面壓縮后傳送,可以有效減少服務器的帶寬使用,也可以加速頁面下載。
另外請注意只能選擇一種方式來開啟 WordPress Gzip 壓縮,否則有可能造成沖突,請謹記。
經過測試,采用服務器壓縮要比使用 PHP 壓縮要更快,而且壓縮之后更小。所以最好的方法還是直接讓 Apache 直接進行 gzip 壓縮。如果無法修改 Apache 的 httpd.conf 文件,再嘗試去修改 php.ini 文件,最終才是使用修改 php 文件以及 WordPress hook 的方法。――wpjam大神
以下代碼可通過運行cdm測試。
整個頁面測試代碼
1 | curl -I -H "Accept-Encoding: gzip, deflate" "https://www.dujin.org/" |
css通過Gzip壓縮測試代碼
1 | curl -I -H "Accept-Encoding: gzip, deflate" "https://www.dujin.org/wp-content/plugins/wpjam-basic/static/style.css" |
js通過Gzip壓縮測試代碼
1 | curl -I -H "Accept-Encoding: gzip, deflate" "https://www.dujin.org/wp-content/plugins/wpjam-basic/static/script.js" |
圖片通過Gzip壓縮測試代碼
1 | curl -I -H "Accept-Encoding: gzip, deflate" "https://www.dujin.org/wp-content/uploads/2019/01/wordpresszmm.jpg" |
小于1K文件Gzip壓縮測試代碼
1 | curl -I -H "Accept-Encoding: gzip, deflate" "https://www.dujin.org/wp-content/plugins/wpjam-basic/static/morris.css" |
新聞熱點
疑難解答
圖片精選