385 Stimmen

Was sind die Unterschiede zwischen Mustache.js und Handlebars.js?

Die wichtigsten Unterschiede, die ich gesehen habe, sind:

  • Lenker fügt hinzu #if , #unless , #with y #each
  • Handlebars fügt Helfer hinzu
  • Lenker-Vorlagen werden kompiliert (Mustache kann auch kompiliert werden)
  • Lenkstangenstützen Pfade
  • Ermöglicht die Verwendung von {{this}} in Blöcken (die den String-Wert des aktuellen Elements ausgeben)
  • Handlebars.SafeString() (und vielleicht einige andere Methoden)
  • Lenker ist 2 bis 7 Mal schneller
  • Schnurrbartträger Umgekehrte Abschnitte (d.h. if !x ... )

(Bitte berichtigen Sie mich, wenn ich mit dem oben Gesagten falsch liege).

Gibt es noch andere wichtige Unterschiede, die ich übersehe?

145voto

frontendbeauty Punkte 1999

Sie haben es ziemlich genau getroffen, aber Mustache-Vorlagen können auch kompiliert werden.

Mustache fehlt es an Helfern und fortgeschrittenen Blöcken, weil es ohne Logik auskommen will. Die benutzerdefinierten Hilfen von Handlebars können sehr nützlich sein, führen aber oft dazu, dass Logik in Ihre Vorlagen eingeführt wird.

Mustache hat viele verschiedene Compiler (JavaScript, Ruby, Python, C, etc.). Handlebars begann in JavaScript, jetzt gibt es Projekte wie django-handlebars , lenkstangen.java , Lenker-Rubin , lightncandy (PHP) y lenker-objc .

88voto

Faraz Kelhini Punkte 3797

Schnurrbart-Profis:

  • Sehr beliebte Wahl mit einer großen, aktiven Gemeinschaft.
  • Serverseitige Unterstützung in vielen Sprachen, einschließlich Java.
  • Vorlagen ohne Logik zwingen Sie dazu, Präsentation und Logik zu trennen.
  • Eine saubere Syntax führt zu Vorlagen, die einfach zu erstellen, zu lesen und zu pflegen sind.

Schnurrbart Nachteile:

  • Ein wenig zu logiklos: grundlegende Aufgaben (z.B. Beschriftung alternativer Zeilen mit unterschiedlichen CSS-Klassen) sind schwierig.
  • Die Anzeigelogik wird häufig an den Server zurückgegeben oder als "Lambda" (aufrufbare Funktion) implementiert.
  • Damit Lambdas auf Client und Server funktionieren, müssen Sie sie in JavaScript schreiben.

Lenker Profis:

  • Vorlagen ohne Logik zwingen Sie dazu, Präsentation und Logik zu trennen.
  • Eine saubere Syntax führt zu Vorlagen, die einfach zu erstellen, zu lesen und zu pflegen sind.
  • Kompilierte und nicht interpretierte Vorlagen.
  • Bessere Unterstützung für Pfade als Mustache (d.h. tief in ein Kontextobjekt hineinreichen).
  • Bessere Unterstützung für globale Helfer als Schnurrbart.

Lenker Nachteile:

  • Erfordert serverseitiges JavaScript zum Rendern auf dem Server.

Source : Der Client-seitige Templating Throwdown: Mustache, Handlebars, dust.js, und mehr

31voto

guypursey Punkte 3044

Ein subtiler, aber signifikanter Unterschied besteht in der Art und Weise, wie die beiden Bibliotheken an den Umfang herangehen. Mustache greift auf den übergeordneten Bereich zurück, wenn es eine Variable im aktuellen Kontext nicht finden kann; Handlebars gibt einen leeren String zurück.

Dies wird in der GitHub README kaum erwähnt, wo es nur eine Zeile dafür gibt:

Handlebars weicht leicht von Mustache ab, da es standardmäßig keine rekursive Suche durchführt.

Wie bereits erwähnt, gibt es jedoch ein Flag, das Handlebars dazu bringt, sich genauso zu verhalten wie Mustache - aber es beeinträchtigt die Leistung.

Dies hat Auswirkungen auf die Art und Weise, wie Sie die # Variablen als Konditionale.

In Mustache können Sie zum Beispiel so vorgehen:

{{#variable}}<span class="text">{{variable}}</span>{{/variable}}

Es bedeutet im Grunde: "Wenn die Variable existiert und wahr ist, drucke eine Spanne mit der Variable darin". Aber in Handlebars, müssten Sie entweder zu:

  • verwenden. {{this}} stattdessen
  • einen übergeordneten Pfad verwenden, d. h., {{../variable}} um wieder in den relevanten Bereich zu gelangen
  • ein Kind definieren variable Wert innerhalb der übergeordneten variable Objekt

Weitere Einzelheiten dazu, wenn Sie sie wünschen, aquí .

26voto

KevBurnsJr Punkte 4824

HINWEIS: Diese Antwort ist veraltet. Sie war zu der Zeit, als sie veröffentlicht wurde, richtig, ist es aber nicht mehr.

Mustache hat Interpreter für viele Sprachen, während Handlebars nur Javascript unterstützt.

13voto

simhumileco Punkte 26451

Ein weiterer Unterschied zwischen den beiden ist die Größe der Datei:

Um die Leistungsvorteile von Handlebars.js zu nutzen, müssen wir vorkompilierte Vorlagen verwenden.

Source : Ein Überblick über JavaScript Templating Engines

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X