菲尼克斯文档说"凤凰模板预先编译的事实使得它们非常快。" 。
我有一些问题,预编译模板实际上意味着什么,以及与Rails应用程序相比,这将在生产中产生多大的重要差异。
答案 0 :(得分:4)
预编译模板实际意味着什么
此处预编译意味着web/templates
中的所有模板实际上都已编译为相应render
中View
函数的正常函数子句。
如果您在PostView
中有web/templates/posts/index.html.eex
和模板,其内容为:
<pre><%= inspect(@posts) %></pre>
然后将该文件与向PostView
添加以下函数几乎完全相同:
def render("index.html", assigns) do
"<pre>" <> inspect(assigns[:posts]) <> "</pre>"
end
*几乎是因为Phoenix在注入字符串之前处理自动HTML转义(以防止XSS),返回iolists而不是连接二进制文件(用于性能)等等。
Here's在Phoenix中实现这个编译逻辑。 (在页面上搜索&#34; before_compile&#34;和&#34; defp compile&#34;)
与Rails应用程序相比,它在生产中会产生多大的显着差异
我确信Rails也必须有一个模板缓存机制,至少对于生产而言,也可能用于开发。我对Rails&#39;的速度/实现并不熟悉。模板以对此发表评论。