gpt4 book ai didi

ruby-on-rails - 使用:coffescript filter inside HAML templates?对性能的影响

转载 作者:行者123 更新时间:2023-12-04 03:04:26 26 4
gpt4 key购买 nike

所以HAML 4 includes a coffeescript filter,它使我们喜欢咖啡的人可以做这样的整洁的事情:

- word = "Awesome."

:coffeescript
$ ->
alert "No semicolons! #{word}"

我的问题:对于最终用户,这是否比使用等效的 :javascript过滤器慢?使用coffeescript过滤器是否意味着会在每次页面加载时将coffeescript编译为javascript(这显然会导致性能下降),还是仅在启动应用程序时才发生一次?

最佳答案

这取决于。

Haml编译过滤器时,它将检查过滤器文本是否为contains any interpolation(#{...})。如果没有,则将在每个请求上转换相同的文本,因此转换在编译时执行一次,结果包含在模板中。

如果过滤器文本中存在插值,则要转换的实际文本将根据每个请求而有所不同,因此,每次都需要编译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

关于ruby-on-rails - 使用:coffescript filter inside HAML templates?对性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com