erb,haml或slim:你建议哪一个?为什么?

Omi*_*gar 98 haml ruby-on-rails erb slim-lang

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

但由于我是初学者,我真的很困惑.你建议哪一个?为什么?Erb,Haml还是Slim?请告诉你理由偏爱其他人.如果您有任何其他建议,请告诉我们.

编辑:我不是在寻找胜利者.我只是想听听你对他们的看法,他们的语法,执行速度等等.

小智 83

使用超薄haml的两大优势:

  1. Slim目前比haml快8倍.

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

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

  • 如果需要大量额外的工作,过早优化并不是一个好主意,但由于显着的性能优势,仅仅选择一个类似的库而不是另一个也不成熟. (13认同)
  • +1 Slim支持HTTP流媒体,我们的支付网关和Heroku遇到问题,似乎流式HTTP是一种解决此问题的方法,但由于我们的应用程序使用HAML运行,此解决方案不再是一个选项 (5认同)
  • @JoshuaMuheim Slim附带基准代码,您可以在自己的机器上修改/测试:https://github.com/stonean/slim#testing (4认同)
  • 你有关于Slim vs Haml速度的声明的可靠来源吗?我到处读了很多关于这个的内容,但除了[Slim的GitHub页面](https://github.com/stonean/slim)之外我没有找到关于它的可证明的信息. (3认同)

Ere*_*bih 64

ERB很好,主要是如果你有一个网页设计师,它将使用纯HTML,并且不知道haml或slim.通过这种方式,他可以编写HTML,并且可以使用正确的标记嵌入ruby逻辑.

如果你同时使用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>
Run Code Online (Sandbox Code Playgroud)

在HAML中它看起来像这样:

#profile
  .left.column
    #date= print_date
    #address= current_user.address
  .right.column
    #email= current_user.email
    #bio= current_user.bio
Run Code Online (Sandbox Code Playgroud)

好多了!

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

  • @ErezRabih实际上HAML和SLIM之间存在重大差异.Slim比HAML快得多.它还具有更清晰的语法,并允许您更干净地编写HTML属性:`a href ="foo"`. (5认同)
  • HAML 看起来就像一堆混乱的单词,前面有散列和点。这太糟糕了。第二个问题是,如果您复制某些内容,例如从互联网上复制引导代码片段,您现在必须将其转换为 HAML/SLIM,然后才能将其粘贴到代码中。这会增加开发时间。有时这些转换工具并不干净,而且还会弄乱很多东西,你开始浪费时间哭泣和撕扯你的头发,而不是让你的代码工作 - 所有这些都是以减慢你的代码为代价的!HAML/SLIM 也很慢。 (3认同)
  • 是的,为此+1,尽管 Haml 和 Slim 删除了 HTML 中的所有垃圾,并且需要一个更好的短语,完全太棒了,许多只使用 HTML 的人根本无法理解它(或者是首先不是手工编码,也不是依赖片段和复制意大利面。) (2认同)

eng*_*ave 32

这是我想出的最重要的事情

ERB:

优点

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

缺点

  • 更冗长
  • 帮助器和视图中的content_for标签可能会很快失控
  • content_for标签使嵌套标签更难,因为erb只返回块中的最后一行.所以你必须追加一个字符串,然后返回它.

HAML

优点

  • 更简洁.没有关闭标签,适合较小的屏幕
  • 视觉清洁结构
  • 内置了帮助程序(haml_concat,haml_capture)以在辅助方法中使用haml
  • 班级链
  • 很多有用的句法糖,比如#为div或.用于类链接,或者:javascript用于JS标记

缺点

  • 依赖于空白,这有时会导致一些难以理解的错误
  • 复杂标签通常需要采用"哈希"格式.(虽然我实际上认为这是一个灵活的例子,对于有人开始它可能会很痛苦.)
  • 作为一个宝石添加(再次可能是一个延伸,把它作为一个骗局)
  • 设计师可能在调整时遇到一些问
  • 除了一般的空白警告......简单的空白错误,例如.用于缩进的制表符和空格可能导致页面在生产中出错,正常的规格/测试将无法捕获.道德:期望对视图测试有更大的需求,并且可能不会将haml用于任务关键视图,除非您确定测试正在测试视图的实际呈现.
  • 比较慢(比erb)
    • 警告:这是我们正在讨论的ruby代码,如果速度是你的应用程序中的阻塞问题,有红宝石的替代品,例如haskell


mon*_*ike 18

对我来说,问题归结为你宁愿%在每个标签|之前或每个新的文本块之前放置吗?

瘦:

 tag(attr= "value")
  | text
Run Code Online (Sandbox Code Playgroud)

HAML:

 %tag{attr: "value"}
   text
Run Code Online (Sandbox Code Playgroud)

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

  • +1.但是与标签位于同一行的文本不需要管道.仅当标记内的第一行文本与标记不在同一行时才需要它.由于压痕,第一个之后的每一行都不需要管道. (9认同)

oco*_*odo 16

https://github.com/scalp42/hamlerbslim - 是一个独立的基准测试,显示Slim和Erb作为获胜者,性能明智(苗条也倾向于减少HTML输出大小.)

我个人的意见是,总体而言,Slim和Haml将节省您在维护方面的时间(==金钱),让您有Haml/Slim精明的人照顾您的观点.

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

最好的情况是,培训这些人使用Slim或者至少让他们接触它,并保留那些"得到它"的人数.