2012-11-23 9 views
5

私はjavascriptで私の仕事のための簡単なテンプレートengingに取り組んでいます。ハンドルバーやひげなどの堅牢なテンプレートエンジンを使用していないので、とてもシンプルにする必要があります。JavaScriptテンプレートのプリコンパイルとは何ですか?

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

それは主に以下の

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

アイテムを行い、非常に単純な機能だが交換する値を保持するオブジェクトです。

誰かが、テンプレート(ハンドルバーなど)がテンプレートをコンパイルするときに、正確に何を意味するのか教えてください。 ?

+0

この投稿が見つかりました。http:// ejohn。org/blog/javascript-micro-templating/@nrabinowitzからの返信を読んだ後。 – Kamal

答えて

7

通常のテンプレートがregexを使用して解析し、その後evalを使用してfunctionに変換されます。 プリコンパイルテンプレートと呼ばれています。

レンダリングテンプレートという名前の引数で渡されたデータでこのような関数を呼び出すと、つまり、テンプレートを呼び出すたびに解析されることはありません。すでに連結して文字列を返す関数の形で存在しています。

-1

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

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

ある日、_ ___は、彼が_ ____に彼と一緒に_ ____ を持参するつもりだったことを決めました。

テンプレートを編集すると、空白が埋められます。

日曜日、JOHNはBATMAN PREMIERに彼とSALLYを連れて行くことにしました。

ホープメタファーは、この場合に便利です。)

+4

いいえ、それはこれらのライブラリの意味ではありません。あなたが記述しているのは、それをコンパイルするのではなく、テンプレートをレンダリングすることです。 – nrabinowitz

+0

Word!あなたが正しい。 – Costa

11

アンダースコア、ハンドルバー、およびほとんどの他のJSテンプレートは、テンプレート文字列から関数を作成します。次に、さまざまな引数で関数を複数回呼び出して、適切なHTML文字列を取得できます。 (UnderscoreとHandlebarsの両方で、テンプレート文字列をJSコードに解析してから、Functionコンストラクタを呼び出して、コンパイルされたテンプレート関数を作成すると思います)。テンプレート文字列を再利用可能な関数に変換します。これはやや重いステップかもしれませんが、テンプレートのレンダリングがずっと速く(ほとんどの場合、単純な正規表現の置換よりも速くなります)、テンプレートコードから関数を作成し、再コンパイルとレンダリングではなく複数回使用する方が効率的ですテンプレートが呼び出されるたびに

関連する問題