Hugo の構築時間を短くするためにやったこと

Hugo の構築時間を短くするためにやったこと #

静的サイトだからこそ Firebase Hosting で運用できて、サクサクなわけなんだけれども、当初からわかっていたこととはいえ、構築時間が大変だ

Hugo は速い。問題は Git 。1 ページ新設するだけで 6,000弱のファイルが更新されるので、commit するとなかなかの時間がかかるわけで

で、やったこと

  1. 年別アーカイブやタグの横の記事件数を表示しないようにする
    • 投稿するたびに数字変わるのでほぼ全ファイル更新されてた
    • 2021/10/02 追記 : Tags の順番が変わるのもなし(降順固定)にした
  2. アーカイブの並びを日付昇順にする
    • 末尾に追加するだけなので、更新ファイル数減るはず。トップページの新着順はしゃあない
  3. .js 、.css、.json の Fingerprint 外す
    • 静的サイトなんで、検索とかを js に頼っているわけで、キャッシュされないように、ファイル名に Fingerprint つける仕組みが Hugo にあって、ステキな仕組みなんだけど、そのため全ファイルがもれなく更新される
  4. Firebase Hosting の Cache-Control いれる
    • ファイル名の Fingerprint 外した分、キャッシュされにくいように max-age を短めに設定
  5. 関連コンテンツ (各ページの 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"
                } ]
            }
        ]
  }
}

See Also

Copyright © 髭。/ Hugo + hugo-book