erb、haml、slim:どれを提案しますか?なぜ?[閉まっている]


103

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

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

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


7
簡単な答えは、初心者にはERBを使用することです。
Scott Schulthess 2013


テンプレートエンジンではありませんが、私が開発したdom gemを調べてみてください。RubyとしてHTMLコードをシームレスに書くことができます。
澤沢

15
この「建設的でない」質問は私にとって非常に役に立ちました。それを尋ねてくれてありがとう、たとえ何らかの理由でモッドがそれが合うと感じていなくても。これはグーグルヒットのトップの1つであり、ここでの多くの回答が私の決断に役立ちました。
アンディベアード

2
それでも、「rails html erb」のグーグル検索結果の第1位です
Orwellophile '24年

回答:


67

ERBは、プレーンHTMLで作業し、hamlまたはslimを知らないWebデザイナーがいる場合に主に役立ちます。このようにして彼はHTMLを書くことができ、適切なタグを使ってルビのロジックを埋め込むことができます。

HTMLロジックとルビーロジックの両方で作業している場合、またはデザイナーが新しいもの(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を実際に使用したことはありませんが、好みの問題だと思います。両方の構文を調べ、どちらがより見栄えが良いかを判断してください。私はこれら2つ(HAML / SLIM)の間に明確な勝者がいるとは思いません。


それを読んでください-決定的な勝者に関する最後の文は、HAMLとSLIM(適切に編集された)に関するものでした。
Erez Rabih

1
そうです、+ 1、Haml&SlimはHTMLからすべてのジャンクを取り出して、より良いフレーズが必要なため、完全に恐ろしいですが、多くのHTMLのみの人々は単純にそれを理解することができません(またはそもそもハンドコーダーではない、またはスニペットとコピーパスタに依存している。)
ocodo

8
@ErezRabihは実際にはHAMLとSLIMの間に大きな違いがあります。SlimはHAMLよりもはるかに高速です。また、構文が簡潔になり、HTML属性をより明確に記述できるようになりましたa href="foo"
Mohamad

87

hamlよりスリムを使用する2つの大きな利点:

  1. スリムは現在hamlの約8倍高速です。

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

  3. Slimにはより自然な構文があります。 a href="foo.html"


3
スリムvs Hamlの速度についてのあなたの声明の信頼できる情報源はありますか?私はどこでもこれについて多くを読みましたが、SlimのGitHubページを除いて、それについて証明できる情報はあまり見つかりません。
Joshua Muheim、2012

4
@JoshuaMuheim Slimには、自分のマシンで変更/テストできるベンチマークコードが付属しています:github.com/stonean/slim#testing
Gerry

5
+1 SlimはHTTPストリーミングをサポートしています。支払いゲートウェイとHerokuで問題が発生しています。ストリーミングHTTPはこの問題を解決する方法のようですが、アプリケーションがHAMLで実行されているため、このソリューションはオプションではありません
Flov

1
@DamianNowak私はあなたの声明が過度に一般化されていると思います。他の要因を考えると、速度は必ずしも決定要因ではないことを意味します。また、ライブラリがボトルネックになるほど遅い場合はどうなりますか?その時は開発者が注目するだろう。開発者はスピードにある程度の重みを与える必要がありますか、そうでなければ彼らは非常にスマートではないでしょう?
ケルビン

16
多くの追加作業が必要な場合、時期尚早の最適化は良い考えではありませんが、パフォーマンスの大幅な向上は時期尚早ではないため、単純に1つの類似したライブラリを選択するだけです。
Jamon Holmgren 2013

35

私の頭の上からこれは私が思いついたものです

ERB

長所

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

短所

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

HAML

長所

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

短所

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

私は、Hamlはerbのconよりもパフォーマンスが遅いことを付け加えておきます。
bkunzi01

うん。確かに。それを追加しました
engineerDave

1
HAMLが好きで、パフォーマンスが心配な場合は、Hamlitを試してください。ERBとほぼ同じ速さでアプリのレンダリング速度が大幅に改善されました。github.com/k0kubun/hamlit
T

21

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

スリム:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

もう1つ注意する点:hamlは新しい行の間の空白を想定し(hamlの空白を削除)、slimは空白を想定しません(Slimの空白をここここに追加)


9
+1。ただし、タグと同じ行のテキストにはパイプは必要ありません。タグ内のテキストの最初の行がタグと同じ行にない場合にのみ必要です。インデントのため、最初の行の後のすべての行はパイプを必要としません。
ケルビン

国際化されていない文字列を書くのが非常に難しくなるので、私は実際にはスリムのこの側面が好きです。
KonstantinK

間違いなく|%すべてのタグのテキストブロックごとに。リテラルテキストのブロックよりもはるかに多くのタグがあります。スリムですが、スリムで私にとって小さな意味のあるメリットは、<>タグが使用されている未加工のリテラルhtmlの前に明示的ながあること|です。私は「あなたが明示的にそれをリテラルにする場合を除き、すべてがスリムであることを好む|あなたはそれをしてHAML作るまで、すべてがリテラルである」上」%
ahnbizcad

SlimはHTML(attr="value")のように見え、HamlはRuby({key: "value"}ハッシュのように)に見えます。
フランクリンYu

16

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

私の個人的な見解では、全体的に見て、SlimとHamlはメンテナンスの点で時間(==お金)を節約し、Haml / Slimに精通した人々があなたの意見を守っていれば、です。

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

すべてのケースで最も良いのは、Slimを使用するか、少なくともSlimを公開するようにこれらの人々を訓練し、「取得」した人の数を維持することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.