自動壓縮部落格圖片為webp格式
作為自己的個人部落格,我非常喜歡搞一些花裡胡哨的東西,其中就包括不少精美圖片,但是過多的圖片會佔用大量的網路資源導致部落格載入速度變慢。
那怎麼辦呢?
第一個想到的就是升級我那頻寬2M的伺服器,不過經費有限只能另尋出路。隨即我又想到了壓縮圖片,既然圖片很多那就壓縮圖片再上傳,這樣就能節約不少因為大圖佔用的資源,於是我找了一個壓縮網站叫recompressor,能夠將大多數圖片大小壓縮到一半以下.
但是用了一陣以後我發現...好麻煩!每次都要自己手動壓縮(ㄒoㄒ)。
這時候我又在想,有沒有什麼東西能夠自動壓縮上傳的圖片呢?經過我的一番查詢與實踐,就要請出今天的主角了“ webp_server_go”!
webp_server_go
WebP
首先說明一下什麼是
WebP
壓縮演算法,WebP是一種有失真壓縮演算法,基於VP8影片格式的幀內編碼,並以RIFF作為容器格式。因此,它是一個具有八位色彩深度和以1:2的比例進行色度子取樣的亮度-色度模型(YCbCr 4:2:0)的基於塊的轉換方案。不含內容的情況下,RIFF容器要求只需20位元組的開銷,依然能儲存額外的 後設資料(metadata)。WebP影像的邊長限制為16383畫素。
webp_server_go
而webp_server_go
的原理就是,當我們的部落格請求一張圖片並將其轉發到了到了webp_server_go時候,它就會將圖片進行壓縮最後返回webp格式的圖片,並且壓縮後的webp圖片會儲存下來方便以後複用,避免了多次壓縮。
部署webp_server_go
新建一個存放二進位制檔案和 config.json
檔案的目錄(可自定義):
mkdir /opt/webps
cd /opt/webps
下載webp_server_go的二進位制檔案並賦予許可權
wget https://github.com/webp-sh/webp_server_go/releases/download/0.1.0/webp-server-linux-amd64 -O webp-server
chmod +x webp-server
建立 config.json配置檔案
{
"HOST": "127.0.0.1",
"PORT": "3333",
"QUALITY": "80",
"IMG_PATH": "/root/.halo",
"EXHAUST_PATH": "/opt/exhasut",
"ALLOWED_TYPES": ["jpg","png","jpeg"],
"ENABLE_AVIF": false
}
引數解釋:
- HOST:一般不修改。
- PORT:webp_server_go 的執行埠。
- QUALITY:轉換質量,預設為 80%。
- IMG_PATH:需要轉換圖片的資料夾,選擇.halo的上一級目錄
- EXHAUST_PATH:webp格式圖片輸出路徑
- ALLOWED_TYPES:需要轉換的格式
- 預設禁用 AVIF 支援,因為將影像轉換為 AVIF 會消耗 CPU
然後將webp_server_go納入系統管理
建立 service 檔案:
vim /etc/systemd/system/webps.service
寫入:
[Unit]
Description=WebP Server
Documentation=https://github.com/n0vad3v/webp_server_go
After=nginx.target
[Service]
Type=simple
StandardError=journal
AmbientCapabilities=CAP_NET_BIND_SERVICE
WorkingDirectory=/opt/webps
ExecStart=/opt/webps/webp-server --config /opt/webps/config.json
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=3s
[Install]
WantedBy=multi-user.target
然後執行systemctl命令執行:
systemctl daemon-reload
systemctl enable webps.service
systemctl start webps.service
檢視執行狀態:
systemctl status webps.service
若成功執行則會輸出以下日誌:
至此webp_server_go就安裝好啦!
接下來還有最後一步!
Nginx反向代理
由於我的部落格使用Nginx做了反向代理,因此需要進行一些配置將圖片轉發到webp_server_go,在server節點新增如下配置:
location ^~ /upload/ {
proxy_pass http://127.0.0.1:3333;
proxy_set_header X-Real-IP $remote_addr;
proxy_hide_header X-Powered-By;
proxy_set_header HOST $http_host;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
}
最後過載Nginx配置,若是寶塔之類則儲存就生效了:
nginx -t
nginx -s reload
讓我們來測一測部落格最佳化了多少吧!
未安裝webp_server_go之前:
足足花了13.52秒!這是一個無法容忍的時間
我們再看看安裝後的網站速度:
瞬間速度暴漲,僅僅只有1.94秒,花費的時間只有之前的零頭,而且可以看到圖片格式也都變成了webp格式!
這下可以安心花裡胡哨了(●ˇ∀ˇ●)