サーバーのトラフィックと読み込み速度は常に最適化の重点です。画像のクリアさを保証しつつ、トラフィックを節約し、読み込み速度を向上させることが優れたウェブページの目標です。
Google は WebP という画像形式を導入しました(Google 公式ウェブサイト)。同じ品質で、ファイルサイズが 40%小さくなり、他の同様の画像形式よりも高い圧縮率を実現しています。さらに、主要なブラウザのサポート率はすでに 80%に達しています。
元の画像の読み込みスクリーンショット:(12.61 秒)
WebP の読み込みスクリーンショット:(4.72 秒)
WebP の読み込みは読み込み速度を大幅に向上させることができます。
Nginx の Lua モジュールのインストール#
省略
サーバーに libwebp をインストールする#
libwebp は WebP 形式に画像を変換するツールです。
yum install libwebp-tools
テスト:
cwebp -q 100 1.jpg -o 1.webp
上記の情報が表示された場合、インストールが成功しています。
nginx.conf#
設定:
.png.webp
、.jpg.webp
、.gif.webp
のリクエストを WebP に変換する Lua ファイルで処理する。
location /img {
expires 365d;
autoindex on;
autoindex_exact_size on;
try_files $uri $uri/ @webp;
}
location @webp {
if ($uri ~ \.(png|jpg|gif)\.webp) {
content_by_lua_file lua/imgProcess.lua;
}
}
imgProcess.lua
#
function file_exists(name) --ファイルが存在するかどうかを判断する関数
local f=io.open(name,"r");
if f~=nil then io.close(f) return true else return false end
end
local newFile = ngx.var.request_filename;
local originalFile = newFile:sub(1, #newFile - 5); --リクエストされたWebP画像から.webp拡張子を削除
if not file_exists(originalFile) then
ngx.exit(404);
return;
end
os.execute("cwebp -q 75 " .. originalFile .. " -o " .. newFile); --libwebpを使用して画像を変換
if file_exists(newFile) then
ngx.exec(ngx.var.uri); --変換されたWebP画像にリダイレクト
else
ngx.exit(404); --変換に失敗:404
end
結果を確認する#
画像にアクセスする前に、サーバーに WebP ファイルはありません。
.jpg.webp のリクエストがサーバーに送信されると、自動的に WebP ファイルが生成されます。