6

私はjavascriptでの作業のために、単純なテンプレートエンジニアリングに取り組んでいます。非常に単純である必要があるため、ハンドルバー、口ひげ、またはその他の堅牢なテンプレートエンジンを使用していません。

パフォーマンスを向上させるために、「 PRECOMPILE」または「COMPILE」テンプレートという単語を読み続けています。しかし、それが正確に何を意味するのかはわかりません。私の仕事では、テンプレートhtmlが毎回ヒットしないように、テンプレートhtmlをオブジェクトにキャッシュします。

これは非常に単純な関数で、主に次のことを行います

_template = _template.replace(/\{(.+?)\}/g, function(token, match, number, txt) {
                    return item[match];
                });

itemは、置き換えられる値を保持するオブジェクトです。

誰か(ハンドルバーなど)がテンプレートをコンパイルすると言ったとき、それが正確に何を意味するのか教えてもらえますか??

4

3 に答える 3

11

アンダースコア、ハンドルバー、およびその他のほとんどの JS テンプレートは、テンプレート文字列から関数を作成します。その後、さまざまな引数で関数を複数回呼び出して、適切な HTML の文字列を取得できます。(アンダースコアとハンドルバーの両方が、テンプレート文字列を JS コードに解析し、Functionコンストラクターを呼び出してコンパイルされたテンプレート関数を作成することでこれを行うと思います。)

これらのライブラリが「プリコンパイル」について話すとき、テンプレート文字列を再利用可能な関数に変換する最初のステップを意味します。これはやや重いステップになる可能性がありますが、テンプレートのレンダリングがはるかに高速になるため (ほとんどの場合、単純な正規表現置換よりも高速です)、再コンパイルしてレンダリングするよりも、テンプレート コードから関数を作成して複数回使用する方が効率的です。テンプレートが呼び出されるたびに。

于 2012-11-23T22:17:43.627 に答える
7

通常、テンプレートは を使用して解析され、次に を使用してregex変換されます。これはprecompile templateと呼ばれます。functioneval

render templateと呼ばれる引数として渡されたいくつかのデータを使用して、このような関数を呼び出します。したがって、テンプレートは、呼び出すたびに解析されるわけではありません。連結して文字列を返す関数の形式で既に存在します。

于 2012-11-23T22:16:40.637 に答える
-1

更新:私はここで間違っています、以下のコメントを参照してください。

さて、私のテンプレートが空白を埋めた文であるとしましょう:

ある日、____は_____を_____に連れて行くことにしました。

テンプレートをコンパイルすると、空白が埋められます。

当日、ジョンはサリーをバットマンプレミアに連れて行くことにしました。

この場合、比喩が役立つことを願っています:)

于 2012-11-23T22:16:19.587 に答える