erb,halm或苗条:您建议哪一个?又为什么呢 [关闭]


102

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

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

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


7
简短的答案是,作为初学者,请使用ERB。
Scott Schulthess


尽管不是模板引擎,但您可能希望研究一下我开发的dom gem。它使您可以像Ruby一样无缝编写HTML代码。
萨达

15
这个“非建设性”的问题对我很有帮助。感谢您提出要求,即使Mod出于某种原因感到不合适。这是Google热门歌曲之一,这里的许多答案帮助我做出了决定。
安迪·贝尔德

2
它仍然是'rails html erb'的#1 Google搜索结果
Orwellophile

Answers:


66

如果您的网络设计师可以使用纯HTML并且不熟悉haml或slim,那么ERB很好。这样,他就可以编写HTML,并且您可以在红宝石逻辑中嵌入适当的标签。

如果您同时使用HTML和ruby逻辑,或者您的设计师已准备好学习新知识(例如HAML),我会推荐HAML。与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)没有确定的赢家。


阅读它-关于最终获胜者的最后一句话是关于HAML和SLIM(经过适当编辑)。
Erez Rabih

1
是的,为此+1,即使Haml&Slim从HTML中抽出所有垃圾,并且想要一个更好的短语,完全吓死了,许多仅HTML的人根本无法理解它(或't手动编码器,还是依靠摘要和复制
粘贴

8
@ErezRabih实际上在HAML和SLIM之间存在主要区别。Slim比HAML快得多。它还具有更简洁的语法,并允许您更清晰地编写HTML属性:a href="foo"
Mohamad 2013年

87

使用苗条而非haml的两个主要优点是:

  1. Slim目前比haml快八倍。

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

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


3
您是否有可靠的消息来源来说明Slim vs Haml的速度?我到处都读到很多关于这个的信息,但是除了Slim的GitHub页面之外,我找不到很多可证明的信息。
2012年

4
@JoshuaMuheim Slim附带了基准代码,您可以在自己的机器上进行修改/测试:github.com/stonean/slim#testing
Gerry

5
+1 Slim支持HTTP流传输,我们的付款网关和Heroku遇到问题,似乎HTTP流传输是解决此问题的一种方法,但是由于我们的应用程序使用HAML运行,因此该解决方案不再
可行

1
@DamianNowak我认为您的发言过于笼统。考虑到其他因素,您可能认为速度不一定是决定因素。另外,如果图书馆的速度足够慢而成为瓶颈,那该怎么办?我敢肯定,开发人员会注意到这一点。开发人员一定要加快速度,否则他们不会很聪明,是吗?
开尔文

16
如果过早的优化需要大量的额外工作,那么它并不是一个好主意,但是,由于具有明显的性能优势,仅仅选择一个相似的库而不是另一个就不是过早的。
Jamon Holmgren 2013年

35

这是我想出的

ERB

优点

  • 默认开箱即用
  • 不依赖空白
  • 最低的进入壁垒(如果来自HTML),因为其带有Ruby代码的HTML
  • 大多数IDE的词法分析器默认都会读取它
  • DHH更喜欢
  • 旧版应用可能仍在使用它

缺点

  • 更详细
  • 帮助程序和视图中的content_for标签可能会很快失控
  • content_for标记使嵌套标记更难,因为erb仅返回块中的最后一行。因此您必须附加到字符串,然后返回该字符串。

HAML

优点

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

缺点

  • 依赖于空格,这有时会导致一些硬错误
  • 复杂标签通常需要采用“哈希”格式。(尽管我实际上认为这是一个很好的例子,对于刚开始的人来说,灵活性可能会很痛苦。)
  • 作为宝石添加(再次拉伸,将其作为缺点)
  • 设计师可能难以调整
  • 除了一般的空白警告...简单的空白错误,例如。制表符和缩进空格可能会导致页面在生产中出现错误,而正常的规格/测试将无法捕获这些页面。道德:期望对视图测试的需求更大,并且除非确定测试正在测试视图的实际呈现,否则不要将haml用于关键任务视图。
  • 比erb慢
    • 警告:这是红宝石代码,我们正在谈论的是,如果速度是应用程序中的阻塞问题,那么还有红宝石的替代品,例如haskell

我还要补充一点,Haml在性能上要比erb慢一些。
bkunzi01 2016年

对。当然。我添加了一个
EngineerDave

1
如果您喜欢HAML并且担心性能,请尝试Hamlit。我看到我的应用程序的渲染速度有了很大的提高,几乎与ERB一样快。github.com/k0kubun/hamlit
Jorge Najera T

21

对我来说,问题是您想%在每个标记|之前还是在每个新文本块之前?

瘦:

 tag(attr= "value")
  | text

哈姆:

 %tag{attr: "value"}
   text

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


9
+1。但是与标记在同一行上的文本不需要管道。仅当标签内的第一行文字与标签不在同一行时才需要。由于缩进,第一行之后的每一行都不需要管道。
开尔文

我实际上很喜欢苗条的这一方面,因为这使我编写非国际化的字符串变得更加困难。
KonstantinK

绝对|是每个%标签的每个文本块。标签远远多于文字文本块。对于我来说,使用slim的一个小巧但语义上的胜利是,任何使用了<>标签的原始html都带有显式|。我更喜欢“一切都是苗条的,除非您明确地用|”来代替它%。”而不是“一切都是字面的,直到您用a 。使其成为汉姆。”
ahnbizcad 2015年

我认为Slim看起来更像HTML(attr="value"),而Haml看起来更像Ruby({key: "value"}像Hash)。
富兰克林·于

16

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.