場合によります。
Haml がフィルターをコンパイルするとき、フィルター テキストに補間( #{...}
) が含まれているかどうかを確認します。何もない場合、各リクエストで変換するのは同じテキストになるため、変換はコンパイル時に 1 回行われ、結果がテンプレートに含まれます。
フィルタ テキストに補間がある場合、変換する実際のテキストはリクエストごとに異なるため、毎回 Coffeescript をコンパイルする必要があります。
例を次に示します。最初の補間なし:
:coffeescript
$ ->
alert "No semicolons! Awesome"
これにより、コードが生成されます (haml -d
生成された Ruby コードを確認するために使用します)。
_hamlout.buffer << "<script>\n (function() {\n $(function() {\n return alert(\"No semicolons! Awesome\");\n });\n \n }).call(this);\n</script>\n";
このコードは単に文字列をバッファに追加するだけなので、Coffeescript は再コンパイルされません。
今補間で:
- word = "Awesome."
:coffeescript
$ ->
alert "No semicolons! #{word}"
これにより、次が生成されます。
word = "Awesome."
_hamlout.buffer << "#{
find_and_preserve(Haml::Filters::Coffee.render_with_options(
"$ ->
alert \"No semicolons! #{word}\"\n", _hamlout.options))
}\n";
ここで、Haml は補間の値が何であるかを確認するのを待つ必要があるため、Coffeescript は毎回再コンパイルされます。
フィルター内に補間を持たないことで、リクエストごとに Coffeescript をコンパイルすることを避けることができます:coffeescript
。
:javascript
フィルターは同様に動作し、補間があるかどうかを確認しますが、フィルター:javascript
は実行時に一部のテキストのみをバッファーに出力するため、それを使用した場合のパフォーマンス ヒットははるかに少なくなります。組み合わせ:javascript
て:coffeescript
フィルタリングし、補間されたデータを入れて静的:javascript
に保つことができます。:coffeescript
- word = "Awesome"
:javascript
var message = "No semicolons! #{word}";
:coffeescript
alert message