【翻訳】We should optimize images
Published at 2015-05-25
※この記事はMediumに投稿したWe should optimize imagesの日本語訳です。
Steve SoudersはHigh Performance Web Siteで、次のように述べています。
エンドユーザーへのレスポンスに費やされる時間の80-90%はフロントエンド において発生している。まずはフロントエンドを最適化することだ。
Webサイトのパフォーマンスの多くはフロントエンドに起因するものです。つまりWebサイトを速くするためには、フロントエンドを最適化しなければなりません。例えば、最適化には次のような要因があります。
中でもペイロードサイズの最小化は、最も実施しやすいものの1つです。ペイロードサイズの最小化には、HTML、CSS、そして画像のファイルサイズを削減します。中でも特に、画像データはネットワーク帯域の多くを占めます。そこで、画像を最適化するためのツールをいくつか紹介したいと思います。
- ImageOptim - 様々な最適化ライブラリ(PNGOUT・Zopfli・PNGCrush・AdvPNG・拡張したOptiPNG・JPEGOptim・JPEGReScan・JPEGTran・GifSicle)を内包し、PNG・JPEG・GIFを最適化するMacのアプリケーション
- ImageAlpha - 24bitのPNGを8bitにダウンコンバートしファイルサイズを大きく削減するMacのアプリケーション
- JPEGmini - JPEGを少ない劣化で減色しファイルサイズを削減するMacのアプリケーション
- RIOT - PNG・JPEG・GIFを最適化するWindowsのアプリケーション
- pngoo - PNGを圧縮するWindowsのアプリケーション
- WebPonize - PNG・JPEGをWebPフォーマットに変換するMacのアプリケーション
これらはGUIアプリケーションなので、簡単に利用することができます。ここにPNGを圧縮したサンプルがあります。
これは圧縮されていないオリジナルの画像です。24bitのPNGで、位置情報・日付・時刻といった様々なメタ情報が含まれています。
これはImageAlphaで8bitにダウンコンバートし、ImageOptimでメタ情報を削除するなどして最適化したPNGです。ほぼ劣化していないように見えます。
こちらはJPEGのサンプルです。メタ情報はImageOptimで削除済ですが、劣化を伴う減色処理はされていません。
更にJPEGminiによって減色処理を施しています。劣化は目立ちませんが、ファイルサイズはオリジナルのおよそ34%程(66%も削減されています!)になっています。写真のような画像は非常に多くの色があるため、減色処理を行った後によく確認しなくてはならないでしょう。これは面倒な作業ですが、より良いことです。
私はコマンドラインのツールも欲しかったので、GruntとGulp用のモジュールを作りました。
- grunt-image - GUIでの操作なく画像を最適化するGruntのモジュール
- gulp-image - grunt-imageのGulpバージョン
これらを使ってPNG・JPEG・GIF・SVGを最適化することができます。インストール?もしGruntやGulpを使ったことがあればとても簡単です(きっと一度は使ったことがあるでしょう☺)。
# download them using npm
$ npm install —-save-dev grunt-image
$ npm install —-save-dev gulp-image
詳細な設定はGitHubのプロジェクトリポジトリを参照してください。
WebPも素晴らしいです。WebPはGoogleが開発する新しい画像フォーマットで、公式サイトで次にようにあります。
可逆圧縮のWebPはPNGと比較して、ファイルサイズが26%小さくなります。非可逆圧縮のWebPは同等画質のJPEGと比較して、ファイルサイズが25%-34%小さくなります。
WebPは、Chromeやその他のChrome Frameをバンドルしているブラウザがサポートしています。FirefoxとSafariはWebPをサポートしていません。しかし興味深いことに、SafariのWebKitを利用しているはずのiOSのChromeはWebPを表示することが可能です(おそらくChrome Frameを内包しているものと思われます)。
WebPは公式サイトから利用することができます。WebPに変換した画像をお見せしたいところですが、悲しいことにMediumではまだ使えないようです☹しかし、私が試した結果では、変換する前のPNGは 28,369 bytes でしたが、WebPに変換したところ 17,382 bytes になり劣化はありませんでした!
もし今まで画像の最適化について無関心だったのであれば、より良いWebパフォーマンスのために最適化を実施してください。最後に、画像についてもっと知るために参考になる記事を紹介します。
- Give PNG a chance — by Stoyan Stefanov / 日本語訳
- Mobile ISP image recompression — by Kornel Lesiński
- PNG8 — The Clear Winner — by Alex Walker
- PNG that works — by Kornel Lesiński
- Image Compression for Web Developers — by Colt McAnlis
最後まで読んでくれて、どうもありがとうございます。