109

我正在学习 Rails,我已经看过这些模板引擎。我对他们没有经验(只有erb)。

但是作为一个初学者,我真的很困惑。你建议哪一个,为什么?Erb、Haml 还是 Slim?请说出您偏爱其中一个的原因。如果您有任何其他建议,请告诉我们。

编辑:我不是在这里寻找赢家。我只是想听听你对它们的看法,它们的语法、执行速度等等。

4

5 回答 5

88

使用 slim 优于 haml 的两大优势:

  1. Slim 目前比 haml 快 8 倍。

  2. Slim 支持 HTTP 流,而 HAML 不支持。

  3. Slim 有更自然的语法:a href="foo.html"

于 2012-07-13T07:35:14.070 回答
68

ERB 很好,主要是如果您有一个可以处理纯 HTML 并且不知道 haml 或 slim 的网页设计师。这样他就可以编写 HTML,并且您可以使用适当的标签嵌入 ruby​​ 逻辑。

如果您同时使用 HTML 和 ruby​​ 逻辑,或者您的设计师准备学习新的东西(例如 HAML),我会选择 HAML。它对 ruby​​ 更加友好,比 ERB 减少了更多的字符数,并且更具可读性。

例如(取自HAML 官方网站):

在 ERB 中,您的视图将如下所示:

<div id="profile">
  <div class="left column">
    <div id="date"><%= print_date %></div>
    <div id="address"><%= current_user.address %></div>
  </div>
  <div class="right column">
    <div id="email"><%= current_user.email %></div>
    <div id="bio"><%= current_user.bio %></div>
  </div>
</div>

在 HAML 中,它看起来像这样:

#profile
  .left.column
    #date= print_date
    #address= current_user.address
  .right.column
    #email= current_user.email
    #bio= current_user.bio

干净了很多!

至于 HAML 和 SLIM 之间的区别——我从来没有真正使用过 SLIM,但我想这是一个品味问题——看看这两种语法并决定哪个在你眼中看起来更好。我认为这两者(HAML / SLIM)之间没有明确的赢家。

于 2012-07-09T07:17:44.253 回答
36

在我的脑海中,这就是我想出的

再培训局

优点

  • 默认开箱即用
  • 不依赖于空白
  • 最低的进入门槛(如果来自 HTML),因为它的 HTML 和 Ruby 代码散布在
  • 大多数 IDE 的词法分析器默认读取它
  • DHH 更喜欢它
  • 遗留应用程序可能仍在使用它

缺点

  • 更详细
  • 助手和视图中的 content_for 标记会很快失控
  • content_for 标签使嵌套标签更难,因为 erb 只返回块中的最后一行。所以你必须附加到一个字符串然后返回它。

HAML

优点

  • 更简洁。没有结束标签,适合较小的屏幕
  • 视觉上更干净的结构
  • 已内置帮助程序(haml_concat、haml_capture)以在辅助方法中使用 haml
  • 类链接
  • 许多有用的语法糖,例如 # 用于 div 或 . 用于类链接,或 :javascript 用于 JS 标签

缺点

  • 依赖于空格,这有时会导致一些硬错误
  • 复杂的标签通常需要诉诸“散列”格式。(虽然我实际上认为这是一个很好的灵活性示例,但对于刚开始的人来说可能会很痛苦。)
  • 添加为宝石(再次将其作为骗局可能有点牵强)
  • 设计师可能会在调整时遇到一些麻烦
  • 除了一般的空白警告...简单的空白错误,例如。用于缩进的制表符和空格会导致页面在生产中出错,而正常的规范/测试无法捕捉到。道德:预计对视图测试的需求更大,并且可能不要将 haml 用于关键任务视图,除非您确定您的测试正在测试视图的实际呈现。
  • 比 erb 慢
    • 警告:这是我们正在讨论的 ruby​​ 代码,如果速度是您的应用程序中的一个阻塞问题,那么还有 ruby​​ 的替代品,例如 haskell
于 2012-07-09T19:50:40.163 回答
22

对我来说,问题归结为您宁愿放在%每个标签|之前还是每个新文本块之前?

瘦:

 tag(attr= "value")
  | text

哈姆尔:

 %tag{attr: "value"}
   text

还有一件事要注意:haml 假定新行之间有一个空格(删除 haml 中的空格),而 slim 假定没有空格(在此处此处在 Slim 中添加空格)

于 2013-04-08T13:23:46.193 回答
17

https://github.com/scalp42/hamlerbslim - 是一个独立的基准测试,显示 Slim 和 Erb 在性能方面是赢家(slim 也会减少 HTML 输出大小。)

我个人的看法是,总体而言,Slim 和 Haml 将在维护方面为您节省时间(== 金钱),前提是您有 Haml/Slim 精明的人来照顾您的意见。

如果你没有这些人,Erb 绝对是要走的路,因为尽管世界上最好的意愿,有很多非常便宜的人可以使用 HTML/Erb,但找到 Haml/Slim 一个完整的神秘。

最好的情况是,培训这些人使用 Slim 或至少让他们接触到它,并保留“得到它”的人的数量。

于 2013-01-10T05:58:33.147 回答