erb, haml oder slim: welches schlägst du vor? Und warum? [geschlossen]

102

Ich lerne Rails und habe diese Template-Engines gesehen. Ich habe keine Erfahrung mit ihnen (nur erb).

Aber da ich ein Anfänger bin, bin ich wirklich verwirrt. Welches schlagen Sie vor und warum? Erb, Haml oder Slim? Bitte geben Sie Ihren Grund an, warum Sie einen den anderen vorziehen. Wenn Sie weitere Empfehlungen haben, teilen Sie uns dies bitte mit.

EDIT: Ich suche hier keinen Gewinner. Ich möchte nur Ihre Meinungen über sie, ihre Syntax, Ausführungsgeschwindigkeit usw. hören.

Omid Kamangar
quelle
7
Die kurze Antwort lautet: Verwenden Sie als Anfänger ERB.
Scott Schulthess
Obwohl es sich nicht um eine Template-Engine handelt, möchten Sie vielleicht einen Blick auf das von mir entwickelte Dom-Juwel werfen . Es ermöglicht Ihnen, HTML-Codes scheinbar nahtlos als Ruby zu schreiben.
Sawa
15
Diese "nicht konstruktive" Frage war für mich unglaublich hilfreich. Danke, dass du es gefragt hast, auch wenn die Mods aus irgendeinem Grund nicht das Gefühl haben, dass es passt. Es war einer der Top-Google-Hits und die vielen Antworten hier haben mir geholfen, meine Entscheidung zu treffen.
Andy Baird
2
Es ist immer noch das
beste

Antworten:

66

ERB ist vor allem dann gut, wenn Sie einen Webdesigner haben, der mit einfachem HTML arbeitet und weder haml noch slim kennt. Auf diese Weise kann er HTML schreiben und Sie können Ruby-Logik mit den richtigen Tags einbetten.

Wenn Sie sowohl an HTML- als auch an Ruby-Logik arbeiten oder Ihr Designer bereit ist, etwas Neues zu lernen (wie HAML), würde ich mich für HAML entscheiden. Es ist viel rubinfreundlicher, reduziert die Anzahl der Zeichen um ein Vielfaches und ist viel besser lesbar als ERB.

Zum Beispiel (entnommen von der offiziellen HAML-Site ):

In ERB sieht Ihre Ansicht folgendermaßen aus:

<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>

In HAML sieht es folgendermaßen aus:

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

Viel sauberer!

Was den Unterschied zwischen HAML und SLIM betrifft - ich habe nie wirklich mit SLIM gearbeitet, aber ich denke, es ist Geschmackssache - schauen Sie sich beide Syntaxen an und entscheiden Sie, welche in Ihren Augen besser aussieht. Ich glaube nicht, dass es einen eindeutigen Gewinner zwischen diesen beiden gibt (HAML / SLIM).

Erez Rabih
quelle
Lesen Sie es - der letzte Satz über den endgültigen Gewinner war über HAML und SLIM (richtig bearbeitet).
Erez Rabih
1
Ja, +1 dafür, obwohl Haml & Slim den ganzen Müll aus HTML herausholen und aus Mangel an einer besseren Phrase sind, total verdammt großartig, können viele HTML-reine Leute einfach nicht den Kopf darüber bekommen (oder sind nicht da) In erster Linie keine Handcodierer, oder verlassen Sie sich auf Schnipsel und Nudeln.)
ocodo
8
@ErezRabih Eigentlich gibt es einen großen Unterschied zwischen HAML und SLIM. Slim ist viel schneller als HAML. Es hat auch eine sauberere Syntax und ermöglicht es Ihnen, HTML-Attribute sauberer zu schreiben : a href="foo".
Mohamad
87

Zwei große Vorteile der Verwendung von Slim gegenüber Haml:

  1. Slim ist derzeit etwa achtmal schneller als Haml.

  2. Slim unterstützt HTTP-Streaming, HAML nicht.

  3. Slim hat eine natürlichere Syntax: a href="foo.html"

Bart ten Brinke
quelle
3
Haben Sie eine zuverlässige Quelle für Ihre Aussage über die Geschwindigkeit von Slim vs Haml? Ich habe überall viel darüber gelesen, aber außer auf der GitHub-Seite von Slim finde ich nicht viele nachweisbare Informationen darüber.
Joshua Muheim
4
@JoshuaMuheim Slim kommt mit Benchmark-Code, den Sie auf Ihrem eigenen Computer ändern / testen können: github.com/stonean/slim#testing
Gerry
5
+1 Slim unterstützt HTTP-Streaming. Wir haben Probleme mit unserem Zahlungs-Gateway und Heroku. Es scheint, dass HTTP-Streaming eine Möglichkeit ist, dieses Problem zu lösen. Da unsere Anwendung jedoch mit HAML ausgeführt wird, ist diese Lösung keine Option mehr
Flov
1
@ DamianNowak Ich denke, Ihre Aussage ist zu verallgemeinert. Sie meinen wahrscheinlich, dass Geschwindigkeit angesichts anderer Faktoren nicht unbedingt ein entscheidender Faktor sein sollte. Was wäre, wenn eine Bibliothek langsam genug wäre, um zu einem Engpass zu werden? Ich bin sicher, Entwickler würden es dann bemerken. Entwickler müssen der Geschwindigkeit etwas Gewicht geben , sonst wären sie nicht sehr schlau, oder?
Kelvin
16
Eine vorzeitige Optimierung ist keine gute Idee, wenn viel zusätzliche Arbeit erforderlich ist. Die einfache Auswahl einer ähnlichen Bibliothek gegenüber einer anderen aufgrund eines erheblichen Leistungsvorteils ist jedoch nicht verfrüht.
Jamon Holmgren
35

Auf den ersten Blick habe ich mir das ausgedacht

ERB :

Vorteile

  • Standard sofort einsatzbereit
  • nicht weißraumabhängig
  • niedrigste Eintrittsbarriere (wenn sie aus HTML stammt) als HTML mit Ruby-Code
  • Die meisten IDE-Lexer lesen es standardmäßig
  • DHH bevorzugt es
  • Legacy-Apps verwenden es wahrscheinlich immer noch

Nachteile

  • ausführlicher
  • content_for-Tags in Helfern und Ansichten können schnell außer Kontrolle geraten
  • content_for-Tags erschweren das Verschachteln von Tags, da erb nur die letzte Zeile im Block zurückgibt. Sie müssen also an eine Zeichenfolge anhängen und diese dann zurückgeben.

HAML

Vorteile

  • prägnanter. Keine schließenden Tags, passt in kleinere Bildschirme
  • optisch sauberere Struktur
  • hat Helfer (haml_concat, haml_capture) eingebaut, um haml in Hilfsmethoden zu verwenden
  • Klassenverkettung
  • viele nützliche syntaktische Zucker wie # für divs oder. für die Klassenverkettung oder: Javascript für JS-Tags

Nachteile

  • Whitespace-abhängig, was dazu führt, dass einige schwierige Fehler manchmal herausgefunden werden
  • Komplexe Tags müssen normalerweise auf das "Hash" -Format zurückgreifen. (Obwohl ich tatsächlich denke, dass dies ein großartiges Beispiel für Flexibilität für jemanden ist, der anfängt, könnte es ein Schmerz sein.)
  • als Edelstein hinzugefügt (wieder wahrscheinlich eine Strecke, um dies als Betrug zu setzen)
  • Designer haben möglicherweise Probleme beim Anpassen
  • zusätzlich zur allgemeinen Leerzeichenwarnung ... einfache Leerzeichenfehler z. Tabulatoren und Leerzeichen zum Einrücken können dazu führen, dass Seiten in der Produktion fehlerhaft sind, die bei normalen Spezifikationen / Tests nicht erfasst werden. Moral: Erwarten Sie einen größeren Bedarf an Ansichtstests und verwenden Sie haml möglicherweise nicht für geschäftskritische Ansichten, es sei denn, Sie sind sicher, dass Ihre Tests das tatsächliche Rendern der Ansicht testen.
  • ist langsamer (als erb)
    • Vorbehalt: Dies ist Ruby-Code, über den wir sprechen. Wenn Geschwindigkeit ein blockierendes Problem in Ihrer Anwendung ist, gibt es Alternativen zu Ruby, z. B. Haskell
Ingenieur Dave
quelle
Ich würde hinzufügen, dass Haml in Bezug auf die Leistung langsamer ist als erb als Betrüger.
bkunzi01
Jep. sicher. Ich habe diesen hinzugefügt
EngineerDave
1
Wenn Sie HAML mögen und sich Sorgen um die Leistung machen, versuchen Sie es mit Hamlit. Ich habe bei meinen Apps eine große Verbesserung der Rendergeschwindigkeit festgestellt, die fast so schnell ist wie bei ERB. github.com/k0kubun/hamlit
Jorge Najera T
21

Die Frage für mich lautet: Würden Sie lieber %vor jedem Tag oder |vor jedem neuen Textblock stehen?

Schlank:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

Eine weitere Sache, auf die Sie achten sollten: haml nimmt einen Leerraum zwischen neuen Zeilen an ( Leerzeichen in haml entfernen ), während slim keinen Platz einnimmt (Leerzeichen in Slim hier und hier hinzufügen )

montrealmike
quelle
9
+1. Die Pipe wird jedoch nicht für Text in derselben Zeile wie das Tag benötigt. Es wird nur benötigt, wenn sich die erste Textzeile innerhalb eines Tags nicht in derselben Zeile wie das Tag befindet. Jede Zeile nach der ersten benötigt aufgrund von Einrückungen keine Pipe.
Kelvin
Ich mag diesen Aspekt von Slim wirklich, da es mir besonders schwer fällt, nicht internationalisierte Streicher zu schreiben.
KonstantinK
definitiv |für jeden Textblock vorbei %für jedes Tag. Es gibt weit mehr Tags als wörtliche Textblöcke. Ein kleiner, aber semantischer Gewinn für mich mit slim ist, dass jedem rohen Literal-HTML mit verwendeten <>Tags ein explizites vorangestellt wird |. Ich bevorzuge "alles ist schlank, es sei denn, Sie machen es explizit wörtlich mit |" über "alles ist wörtlich, bis Sie es mit einem %.
ahnbizcad
Ich denke, Slim sieht eher wie HTML ( attr="value") aus, während Haml eher wie Ruby ( {key: "value"}wie Hash) aussieht .
Franklin Yu
16

https://github.com/scalp42/hamlerbslim - ist ein unabhängiger Benchmark, bei dem Slim und Erb in Bezug auf die Leistung als Gewinner angezeigt werden (Slim reduziert tendenziell auch die HTML-Ausgabegröße.)

Meine persönliche Meinung ist, dass Slim und Haml Ihnen insgesamt Zeit (== Geld) bei der Wartung sparen, vorausgesetzt, Sie haben Haml / Slim-versierte Leute, die sich um Ihre Ansichten kümmern.

Wenn Sie diese Leute nicht haben, ist Erb definitiv der richtige Weg, denn trotz des besten Willens der Welt gibt es viele sehr preiswerte Leute, die mit HTML / Erb arbeiten können, aber Haml / Slim als vollständig empfinden Geheimnis.

Am besten trainieren Sie diese Leute, um Slim zu verwenden, oder setzen Sie sie zumindest damit aus, und behalten Sie die Anzahl derer bei, die es "bekommen".

ocodo
quelle