web-dev-qa-db-ja.com

erb、hamlまたはslim:どちらをお勧めしますか?なぜ?

私はRailsとこれらのテンプレートエンジンを見てきました。私はそれらの経験がありません(erbのみ)。

しかし、私は初心者なので、本当に混乱しています。どちらを提案しますか、そしてその理由は何ですか? Erb、HamlまたはSlim?他よりも1つを好む理由を教えてください。また、他に推奨事項がある場合はお知らせください。

編集:ここで勝者を探していません。それら、構文、実行速度などについての意見を聞きたいだけです。

97
Omid Kamangar

ERBは、主にプレーンHTMLで動作し、hamlまたはslimのいずれかを知らないWebデザイナーがいる場合に適しています。この方法で、彼は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>

HAMLでは、次のようになります。

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

たくさんのクリーナー!

HAMLとSLIMの違いについては-SLIMを実際に使用したことはありませんが、好みの問題だと思います-両方の構文を見て、どちらがより良く見えるかを決定してください。これら2つの間に明確な勝者があるとは思わない(HAML/SLIM)。

62
Erez Rabih

Slim over hamlを使用する2つの大きな利点:

  1. 現在、スリムはhamlよりも約8倍高速です。

  2. SlimはHTTPストリーミングをサポートしていますが、HAMLはサポートしていません。

  3. Slimの構文はより自然です:a href="foo.html"

82
Bart ten Brinke

頭のてっぺんからこれが思いついた

[〜#〜] erb [〜#〜]

長所

  • デフォルト設定
  • 空白に依存しない
  • Rubyコードを振りかけたHTMLとしてのエントリの最低バリア(HTMLから来る場合)
  • ほとんどのIDEのレクサーはデフォルトでそれを読みます
  • DHHはそれを好む
  • おそらくレガシーアプリはまだそれを使用しています

短所

  • より冗長
  • ヘルパーとビューのcontent_forタグはすぐに手に負えなくなる可能性があります
  • content_forタグは、erbがブロックの最後の行のみを返すため、タグのネストを難しくします。したがって、文字列に追加してから返す必要があります。

[〜#〜] haml [〜#〜]

長所

  • より簡潔に。終了タグなし、小さな画面に収まる
  • 視覚的にきれいな構造
  • ヘルパーメソッドでhamlを利用するためのヘルパー(haml_concat、haml_capture)を組み込みました
  • クラス連鎖
  • divや。クラスチェーンの場合、またはJSタグの場合:javascript

短所

  • 空白に依存するため、いくつかのハードエラーが発生する場合があります
  • 複雑なタグは通常、「ハッシュ」形式に頼る必要があります。 (実際、これは誰かが柔軟性を発揮する素晴らしい例だと思いますが、それは苦痛かもしれません。)
  • 宝石として追加(これはおそらくこれを詐欺とするためのストレッチかもしれません)
  • デザイナーが調整するのに苦労するかもしれません
  • 一般的な空白の警告に加えて...単純な空白のエラー。インデント用のタブとスペースは、通常の仕様/テストでは捕捉できない本番環境でページを誤らせる可能性があります。道徳:ビューテストの必要性が高まることを期待し、テストがビューの実際のレンダリングをテストしていることが確実でない限り、ミッションクリティカルなビューにhamlを使用しないでください。
  • 遅い(erbより)
    • 注意:これはRuby速度がアプリケーションのブロックの問題である場合、私たちが話しているコードは代替がありますRubyへ、例えばhaskell
32
engineerDave

私の質問は、%すべてのタグの前または|すべての新しいテキストブロックの前に?

スリム:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

注目すべきもう1つの点は、hamlは新しい行の間に空白を想定する( hamlの空白を削除する )、slimは空白を想定しない(スリムに空白を追加する here および ここ

18
montrealmike

https://github.com/scalp42/hamlerbslim -独立したベンチマークであり、SlimとErbがパフォーマンスの面で勝者として表示されます(slimはHTML出力サイズも縮小する傾向があります)。

私個人の意見では、スリムとHamlはメンテナンスに関して時間(==お金)を節約し、Haml/Slimに精通した人々があなたの意見を見てくれると思います。

これらの人々がいなければ、Erbが間違いなく進むべき道です。世界で最高の意志があるにもかかわらず、HTML/Erbで作業できる非常に安価な人々がた​​くさんいますが、Haml/Slimが完全であることがわかるからです。神秘。

何よりも、Slimを使用するようにこれらの人々を訓練するか、少なくともSlimにさらし、「それを得る」人の数を維持してください。

16
ocodo