erb、haml 或 slim:你推荐哪一个?为什么? [关闭]

问题描述 投票:0回答:5

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

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

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

ruby-on-rails haml erb slim-lang
5个回答
88
投票

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

  1. Slim 目前比 haml 快八倍左右

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

  3. Slim 有更自然的语法:

    a href="foo.html"


68
投票

ERB 很好,主要是如果你有一个网页设计师可以在纯 HTML 上工作并且不知道 haml 或 slim。通过这种方式,他们可以编写 HTML,并且您可以使用适当的标签嵌入 ruby 逻辑。

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

例如(取自官方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)。


37
投票

这就是我想到的

ERB:

优点

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

缺点

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

火腿

优点

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

缺点

  • 依赖于空格,有时会导致一些难以解决的错误
  • 复杂的标签通常需要求助于“哈希”格式。 (虽然我实际上认为这是灵活性的一个很好的例子,但对于刚开始的人来说可能很难。)
  • 作为宝石添加(再次可能将其视为骗局)
  • 设计师在调整时可能会遇到一些麻烦
  • 除了一般的空白警告...简单的空白错误,例如。用于缩进的制表符和空格可能会导致页面在生产中出现错误,而正常的规范/测试不会发现这些错误。道德:预计对视图测试的需求更大,并且可能不要将 haml 用于任务关键视图,除非您确定您的测试正在测试视图的实际呈现。
  • 比 erb 慢
    • 警告: 这是我们正在谈论的 ruby 代码如果速度是您应用程序中的阻塞问题,则有 ruby 的替代方案,例如哈斯克尔

22
投票

我的问题归结为你愿意在每个标签之前放置

%
还是在每个新文本块之前放置
|

苗条:

 tag(attr= "value")
  | text

哈姆:

 %tag{attr: "value"}
   text

还有一点需要注意:haml 假设新行之间有一个空白(删除 haml 中的空白),而 slim 假设没有空格(在 Slim herehere 中添加空白)


17
投票

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

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

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

最重要的是,培训这些人使用 Slim 或至少让他们接触它,并保留“了解它”的人数。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.