2017年5月5日金曜日

Hugoのページ生成をpartialCachedで高速化

静的サイトジェネレータのHugoに最近、partialCachedという機能が付いていました。 名前の通りpartialでの呼び出しをキャッシュするみたいです。 同じレイアウトを大量のページで使い回す場合にはかなり早くなりそうだと前々から思っていました。

使い方は至ってシンプルで、以下のようにするだけです。
{{ partial "header.html" . }}  # before

# after1 ... サイト全体で内容が統一な時
{{ partialCached "header.html" . }}
# after2 ... セクション内で内容が同一な時
{{ partialCached "header.html" . .Section }}

というのがマニュアルに書かれている事なのですが、実際にはマニュアルだけでは動作がよくわからなかったので色々確認してみました。 その結果、hugo/layouts/_default/single.htmlなどのデフォルト設定が優先されるようです。 ここでのグローバル宣言は他セクションを上書きします。

バグの混入が怖い方は、まず全ページで共通のpartialコンテンツだけキャッシュすると良いと思います。 ここで留めればまずバグは入らないでしょう。 さらに高速化したい人は微妙に表示が異なるようなpartialコンテンツをセクションごとに.Section付きで編集していけば、 バグの混入確率は低く抑えられそうな気がします。

何はともあれ1万ページくらいあるサイトに早速適用してみました。何度も計測している訳ではないのでざっくり計算です。 直前のキャッシュの効き方にも影響されますし、ページ構成にもよるでしょうが、結構高速化している事は確かのようです。
total in 59349 ms  # before
total in 25563 ms  # after

Hugoは元々高速なのにさらに早くなりました。素晴らしい。

0 件のコメント: