Hugo の構築時間を短くするためにやったこと #
静的サイトだからこそ Firebase Hosting で運用できて、サクサクなわけなんだけれども、当初からわかっていたこととはいえ、構築時間が大変だ
Hugo は速い。問題は Git 。1 ページ新設するだけで 6,000弱のファイルが更新されるので、commit するとなかなかの時間がかかるわけで
で、やったこと
- 年別アーカイブやタグの横の記事件数を表示しないようにする
- 投稿するたびに数字変わるのでほぼ全ファイル更新されてた
- 2021/10/02 追記 : Tags の順番が変わるのもなし(降順固定)にした
- アーカイブの並びを日付昇順にする
- 末尾に追加するだけなので、更新ファイル数減るはず。トップページの新着順はしゃあない
- .js 、.css、.json の Fingerprint 外す
- 静的サイトなんで、検索とかを js に頼っているわけで、キャッシュされないように、ファイル名に Fingerprint つける仕組みが Hugo にあって、ステキな仕組みなんだけど、そのため全ファイルがもれなく更新される
- Firebase Hosting の Cache-Control いれる
- ファイル名の Fingerprint 外した分、キャッシュされにくいように max-age を短めに設定
- 関連コンテンツ (各ページの See Also) は。。。まぁいいや。今回はそのままで
max-age はもともと 3600秒だったりとか、アーカイブの並び順は無理に変えなくてもいいんじゃ? とか色々あるんだけれども、ひとまず結果
詳細は気が向いたら書きます
実施前
$ git log 7a582f --max-count=1 --name-only|wc -l
5612
実施後
$ git log 09bd0a --max-count=1 --name-only|wc -l
816
正確にファイル数じゃないけど、目安、目安。相当減ったなー
同じタグがついた記事は全部更新されるので (See Alsoの更新)、どのタグつけたかで結構変わる
ちなみにこの記事だと Hugo も Firebase も記事少ないので、commit されたファイルは 10 くらい、更新時間は Hugo と Git の処理時間合わせて 3 分くらいでした。これを長いと感じるかどうか
こういう変更が気軽にできるので、Hugo はいいですね
2021/10/02 追記: 現時点での firebase.json 書いておく
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"headers": [
{
"source": "ja.search.min.js",
"headers" : [ {
"key" : "Cache-Control",
"value" : "max-age=3600"
} ]
},
{
"source": "ja.search-data.min.json",
"headers" : [ {
"key" : "Cache-Control",
"value" : "max-age=3600"
} ]
},
{
"source": "/*.@(png|ico|svg)",
"headers" : [ {
"key" : "Cache-Control",
"value" : "max-age=3153600"
} ]
},
{
"source": "manifest.json",
"headers" : [ {
"key" : "Cache-Control",
"value" : "no-cache"
} ]
}
]
}
}