1. HUGO partialCached を理解する

HUGOの独自テーマでpartialテンプレートを作成中にpartialCachedの情報を見つけました。

この記事ではpartialCachedを調べて理解したのでを共有します。

結論としてはそこまで重要な機能ではないので意識する必要性は低い。ということです。

2. partialCachedはパフォーマンス向上のために使用する

partialCachedの機能は文字通りpartialテンプレートのキャッシュ化です。一度partialテンプレートを展開したらキャッシュ化して再展開しません。

ページ作成速度のパフォーマンス向上のために使用する機能。

ここで注意したいのはページ表示速度ではなくページ作成速度だということです。ページを作成したあとは静的サイトです。エンドユーザがページを表示する速度に影響はありません。そう考えると意識してpartialCachedを使用する必要性は低いと考えます。複雑なpartialを作成してページ数も多くてページ作成パフォーマンスに不満を感じたときに対応するくらいで良いのでは無いでしょうか?

理解してみると簡単な機能でしたが理解する前は引き渡す引数をキャッシュ化できるのでは無いか?など無用な期待を膨らませたりもしていました。

3. 情報源は公式

情報源は公式で必要十分でした。

英語では難しいので話題のDeep Lで自動翻訳してもらいました。

@HUGO

The partialCached template function can offer significant performance gains for complex templates that don’t need to be re-rendered on every invocation.

@Deep L

partialCached テンプレート関数は、呼び出しのたびに再レンダリングする必要のない複雑なテンプレートのパフォーマンスを大幅に向上させることができます。


@HUGO

You can also pass additional parameters to partialCached to create variants of the cached partial. For example, if you have a complex partial that should be identical when rendered for pages within the same section, you could use a variant based upon section so that the partial is only rendered once per section:

@Deep L

また、partialCached に追加のパラメータを渡すことで、キャッシュされたパーシャルのバリアントを作成することもできます。例えば、同じセクション内のページに対してレンダリングされたときに同一であるべき複雑なパーシャルがある場合、セクションに基づいたバリアントを使用して、パーシャルがセクションごとに一度しかレンダリングされないようにすることができます。


@HUGO

Note that the variant parameters are not made available to the underlying partial template. They are only use to create a unique cache key. Since Hugo 0.61.0 you can use any object as cache key(s), not just strings.

@Deep L

variant パラメータは、基礎となる部分テンプレートでは利用できないことに注意してください。これらはユニークなキャッシュキーを作成するためにのみ使用されます。Hugo 0.61.0 以降では、文字列だけでなく任意のオブジェクトをキャッシュキーとして使用することができます。

この表現が難しい。つまり指定したvariantは引数としてpartial内部で使用できるものでは無いということです。私がpartialについて調べたのは引数を渡してpartial内部で使用したかったからで、partialCachedでは私のニーズを満たせないことが分かります。

関係ないですがDeep Lの翻訳精度が高いですね。

4. まとめ

partialCachedを理解できました。述べたようにそこまで意識する必要性は低い機能だと思います。気がついた時点でヘッダーやフッターの呼び出しをpartialCachedに変更していく程度の対応で問題ないと考えています。

今回は以上です。