はい、テンプレートを事前にコンパイルすることをお勧めします。その理由は、テンプレートの使用は通常2つのステップで構成されているためです。
- 構文解析
- データと解析されたテンプレートから文字列を生成する
解析はコストのかかる操作です。基本的には、トークン(特別な単語)の識別とツリー構造の構築で構成されます。例えば:
{{#with author}}
<h2>By {{firstName}} {{lastName}}</h2>
{{/with}}
with
このブロックは、親ステートメントといくつかの子、、、および"<h2>By "
を持つfirstname
ツリーと考えることができます。lastName
"</h2>"
テンプレートをプリコンパイルすると、そのツリー構造を解析して生成した結果であるコードが生成されるため、そのコードを使用するたびに、ツリーを解析して生成する必要はありません。多くのCPUサイクルを節約できます。
ロジックは、サーバーの起動時にいくつかのファイルを同期的に読み取るか、毎回読み取るかと同じです。最初にテンプレートファイルを読み取ると、IO操作は少なくなりますが、それらのテンプレートのコンテンツを保存するためにより多くのメモリを使用します。同じことが構文解析にも当てはまります。
私たちの多くが行うことは、どのアセットが頻繁に使用されるかを特定し(テンプレートは通常このカテゴリにあります)、それらをメモリにキャッシュし、残りをオンデマンドで読み取るために残します。つまり、テンプレートを変更してサイトを更新するだけでは不十分です。サイトをバージョン管理する必要があります。更新を行うには、ノードプロセスを強制終了して再起動する必要があります。それがサイトにとって良いアイデアであるかどうかは、展開をどのように編成するかによって異なります。
JadeとHandlebarsを組み合わせる限り、2つの異なるテンプレートをレンダリングするのはよりコストのかかる操作であり、そのうちの1つしかプリコンパイルできないため、良い考えとは思えません。一方のテンプレートはもう一方の結果に依存するため、両方をプリコンパイルすることはできません。あなたの場合、Jadeテンプレートの「ソースコード」は、Handlebarsテンプレートを適用した結果によって異なります。