cod*_*hal 1 elixir phoenix-framework
Phoenix 文档说“Phoenix 模板是预编译的这一事实使它们非常快。” .
我有几个问题,预编译模板实际上意味着什么,与 Rails App 之类的东西相比,这在生产中会产生多大的显着差异。
预编译模板实际上意味着什么
这里的预编译是指里面的所有模板web/templates
实际上都编译成render
对应的View
.
如果您有一个包含内容PostView
的模板web/templates/posts/index.html.eex
:
<pre><%= inspect(@posts) %></pre>
Run Code Online (Sandbox Code Playgroud)
然后拥有该文件几乎*与将以下函数添加到完全相同PostView
:
def render("index.html", assigns) do
"<pre>" <> inspect(assigns[:posts]) <> "</pre>"
end
Run Code Online (Sandbox Code Playgroud)
*几乎是因为 Phoenix 在注入字符串之前处理自动 HTML 转义(以防止 XSS),返回 iolists 而不是连接二进制文件(为了性能)等等。
下面是这个编译逻辑在 Phoenix 中的实现。(在页面上搜索“before_compile”和“defp compile”。)
与 Rails App 之类的东西相比,这在生产中会有多大的显着差异
我确信 Rails 也必须有一个模板缓存机制,至少对于生产来说,可能还有用于开发。我不太熟悉 Rails 模板的速度/实现来对此发表评论。