意外と効くCSSとJavaScriptのminify
CSSとJavaScriptの最小化(minify)は、データの削減量としては地味ですがPageSpeed Insightsのスコア改善に意外と効果があります。これはPageSpeed Insightsのスコアがレンダリングブロックの時間に敏感だからです(もちろん保証はありません!)。
PageSpeed Insightsの点数はどのように計算されているか。100点をとるための条件
https://qiita.com/miyanaga/items/d38124cdd64a1999fed9
minifyはタスクランナーやフレームワークのアセットパイプラインで自動化するのが常套手段ですが、複数のメンバーで運用中のサイトに後から導入するのは一苦労です。
そこでVisual Studio Codeの機能拡張と、.htaccess
ファイルで稼働中のサイトに途中からCSSとJavaScriptのminifyを開始する方法を紹介します。
JS & CSS Minifier 拡張機能
Visual Studio Codeに次の拡張機能をインストールします。
JS & CSS Minifier
https://marketplace.visualstudio.com/items?itemName=olback.es6-css-minify
ワークスペースの設定にes6-css-minify.minifyOnSave
を追加します。
{
"folders": [
{ "path": "." }
],
"settings": {
"es6-css-minify.minifyOnSave": "yes"
}
}
これで任意の.css
ファイルまたは.js
ファイルを保存すると、その瞬間にminifyされた.min.css
と.min.js
が作成されるようになります。
- 例:
sample.css
を保存 → minifyされたsample.min.css
がとなりに自動作成されます。
既存の.css
ファイルや.js
ファイルを一括でminifyする機能拡張を探したのですが、見当たりませんでした(もしあったら教えてください!)。
minifyされたファイルがあれば優先する.htaccess
ファイル
HTML側の参照を.min.css
や.min.js
ファイルに変更するところですが、ここでは.htaccess
でRewriteモジュールを設定して振り分けをしてみます。
DocumentRootの.htaccess
ファイルに次の記述を行います。
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/$1.min.$2 -f
RewriteRule ^([^.]+)\.(css|js)$ $1.min.$2 [L,NC]
これでブラウザからsample.css
やsample.js
が参照されたとき、もしsample.min.css
やsample.min.js
があればApacheは実際にはそれらを返すようになります。
「HTML側を変えた方が早い!」という場合はもちろんそれでも。
個人的には.min.css
や.min.js
を消せば元に戻して検証しやすい点が気に入っています。
DocumentRoot以外に.htaccess
を記述する場合
もし、.css
や.js
ファイルが/assets/
以下にしか存在しないのであれば、/assets/.htaccess
ファイルとして次の記述を行うと効率がよいです。
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/assets/$1.min.$2 -f
RewriteRule ^([^.]+)\.(css|js)$ /assets/$1.min.$2 [L,NC]
2箇所で**/assets/
を補う必要があるので注意してください。** RewriteCond
でファイルの有無を確認する都合上、RewriteBase
がうまく使えません。
バンドリング(1ファイルへの結合)とPageSpeed Insightsのスコア
タスクランナーやアセットパイプラインでは、CSSやJavaScriptの最小化と同時に各々を1ファイルにまとめてくれます。
これはリクエスト数を減らして無駄なオーバーヘッドを削減する措置ですが、経験上、適度にファイルが分割されている方が並列ダウンロードによりPageSpeed Insightsのスコアが上がります。HTTP/2も一般的になってきてますし。
ここで紹介した方法では1ファイルへの結合は行われませんが、その意味で効果を期待できます。ぜひ試してみてください。