Was sind die Vor- und Nachteile von Jade und EJS für Node.js Vorlagen? [geschlossen]

118

Jade versus EJS, was sind die Vor- und Nachteile der einzelnen und für welche Zwecke sind sie jeweils konzipiert?

Gibt es andere Express-kompatible Template-Engines , die gut sind und warum?

HaoQi Li
quelle

Antworten:

178

Ich habe vorher Jade benutzt. Das Schöne an Jade ist, dass Sie eine kürzere Syntax haben, was bedeutet, dass Sie schneller tippen können. Das blockin Jade ist ziemlich mächtig, was mir beim Umgang mit komplexem HTML-Code sehr helfen kann.

Auf der anderen Seite ist es schwierig, einige einfache Dinge in Jade zu tun, wie das Hinzufügen von Klassen zu einem DIV basierend auf einer einfachen if-Bedingung. Ich muss so etwas sagen

- if (isAdmin)
  div.admin.user
- else
  div.user

Jade unterscheidet auch nicht zwischen den Tags und den Variablen, die den Code sehr verwirrend machen (zumindest für mich).

a(href='/user/' + user.id)= user.name

Jade ist auch nicht Designer-freundlich. Meine Designerfreunde geben mir oft HTML und CSS (sie haben kürzlich zu WENIGER gewechselt, möchten aber immer noch HTML verwenden). Wenn ich Jade verwende, muss ich HTML in Jade konvertieren. Auch in Jade müssen wir Einrückungen verwenden. Wenn Ihre HTML-Struktur kompliziert wird, sieht Ihr Code schrecklich aus (insbesondere Tabellen). Manchmal weiß ich nicht einmal, auf welchem ​​Niveau ich bin

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

Vor kurzem habe ich zu EJS gewechselt und bin bisher damit zufrieden. Es kommt reinem HTML sehr nahe und verwendet dieselbe Syntax wie die von mir verwendete Frontend-Template-Engine (Unterstrich-Vorlage). Ich muss sagen, dass mit EJS alles einfacher ist. Ich muss nicht die gesamte Konvertierung durchführen, wenn ich HTML-Vorlagen von meinem Designer-Freund erhalte. Ich muss lediglich die dynamischen Teile durch Variablen ersetzen, die von ExpressJS übergeben wurden. Dinge, die mich bei der Verwendung von Jade verrückt machen, werden in EJS gelöst

<div class="<%= isAdmin? 'admin': '' %> user"></div>

Und ich kann wissen, was mit EJS ist

<a href="/user/<%= user.id %>"><%= user.name %></a>

Wenn Sie die kurze Syntax von Jade (wie ich) vermissen, können Sie Zen-Coding und EJS kombinieren, um den Fortschritt im Allgemeinen zu beschleunigen. In Bezug auf die Leistung sehe ich keine Unterschiede

EJS ist jedoch nicht so leistungsfähig wie Jade, es hat standardmäßig keine Blöcke (dieser Typ hat eine Blockfunktion für EJS https://github.com/RandomEtc/ejs-locals implementiert ).

Es liegt also ganz bei Ihnen, auszuwählen, was Sie bequem macht. Wenn Sie jedoch wie ich eine andere Template-Engine für das Frontend verwenden, ist es besser, wenn Sie für beide Seiten dasselbe verwenden

Update 16. Dezember 2013: Vor kurzem habe ich von EJS zu Swig gewechselt (das ein ähnliches Konzept wie das von Jinja2 in der Python-Welt hat). Der Hauptgrund ist das Fehlen von Block in EJS auch mit Hilfe von ejs-locals. Swig verwendet auch einfaches HTML für Vorlagen und viele coole Funktionen, die eine Vorlagen-Engine haben sollte, zum Beispiel Filter und Tags, die EJS nicht hat

Tan Nguyen
quelle
1
Wenn Sie nicht wissen, auf welcher Ebene Sie sich befinden, sollte erwähnt werden, dass Jade neue Tags für eine einzelne Zeile unterstützt. Aus Jades Dokumentation geht hervor: "Um Platz zu sparen, bietet Jade eine Inline-Syntax für verschachtelte Tags." A: img "entspricht" <a> <img /> </a> ".
Verdi Erel Ergün
1
Ich habe es vor Jadeein oder zwei Jahren versucht . Vielleicht wird es jetzt besser. Wie auch immer ich meinen ersten Punkt betrachte, es wird nicht leicht sein, das zu umgehen
Tan Nguyen
1
Hast du html2jade gesehen ?
Beatgammit
4
Ich habe dir dieses Tool gemacht, aber jedes Mal, wenn der Designer mir etwas gibt, muss ich eine Konvertierung durchführen (das ist ärgerlich)
Tan Nguyen
1
Ich wollte nur erwähnen (in Bezug auf Ihren ersten Punkt zu Bedingungen), dass Sie möglicherweise ternäre Syntax für diesen Anwendungsfall verwenden können. Siehe diese Stapelüberlauffrage: stackoverflow.com/questions/9488029/…
Rob Gibbons
43

Ich würde nicht sagen, dass einer besser ist als der andere. Sie sind sicher unterschiedlich, aber "besser" ist ein relativ relativer Begriff.

Ich bevorzuge EJS, weil ich denke, dass HTML nicht schlecht ist und ich mit anderen arbeiten kann, ohne dass sie Jade lernen müssen.

Jade ist jedoch ziemlich sauber und sorgt für ordentlichen Code in Ihren Ansichten.

Wählen Sie, was Sie sich wohler fühlen.

Hector Correa
quelle