【发布时间】:2016-06-12 16:46:24
【问题描述】:
Phoenix 文档说 “Phoenix 模板经过预编译这一事实使其速度极快。”。
我有几个问题,与 Rails 应用程序之类的东西相比,预编译模板的实际含义是什么?这会对生产产生多大的影响。
【问题讨论】:
Phoenix 文档说 “Phoenix 模板经过预编译这一事实使其速度极快。”。
我有几个问题,与 Rails 应用程序之类的东西相比,预编译模板的实际含义是什么?这会对生产产生多大的影响。
【问题讨论】:
预编译模板的实际含义是什么
这里的预编译是指web/templates中的所有模板实际上都编译成对应View中render函数的普通函数子句。
如果您有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 中的实现。 (在页面中搜索“before_compile”和“defp compile”。)
与 Rails 应用程序相比,这将在生产中产生多大的显着差异
我确信 Rails 还必须有一个模板缓存机制,至少对于生产来说,而且可能对于开发来说也是如此。我对 Rails 模板的速度/实现不太熟悉,无法对此发表评论。
【讨论】: