Чем отличаются Mustache.js от Handlebars.js?

Основные различия, которые я видел:

Handlebars adds #if, #unless, #with, and #each Handlebars adds helpers Handlebars templates are compiled (Mustache can be too) Handlebars supports paths Allows use of {{this}} in blocks (which outputs the current item's string value) Handlebars.SafeString() (and maybe some other methods) Handlebars is 2 to 7 times faster Mustache supports inverted sections (i.e. if !x ...)

(Пожалуйста, исправьте меня, если я ошибаюсь с вышесказанным.)

Есть ли другие важные различия, которые я пропускаю?

 Shadow Man24 окт. 2013 г., 20:55
... и я верю, что это все, а не список.
 Stephen Tvedt11 апр. 2014 г., 22:45
Я написал об этом подробно, а также покажу, как вы можете сделать нечто подобное для супер базовых шаблонов JavaScript для динамического контента здесь:http://stephentvedt.com/2013/09/23/html-templating-comparison/
 Chad Johnson21 дек. 2013 г., 04:03
@ShadowCreeper Спасибо. Обновленный пост.
 Walter Tross09 дек. 2014 г., 21:05
Интересно, кто принял последнее редактирование (2014-10-16). Это должен был быть ответ.
 Mikko Ohtamaa25 мая 2012 г., 19:19
Вот также тест производительности, сравнивающий эти дваjsperf.com/dom-vs-innerhtml-based-templating/366 - есть лучшие альтернативы;)

Ответы на вопрос(8)

NOTE: This answer is outdated. It was true at the time it was posted, but no longer is.

Усы имеют переводчиков на многих языках, в то время как Handlebars - только Javascript.

 Chad Johnson18 янв. 2014 г., 20:16
Очень хороший момент.
 13 янв. 2017 г., 10:44
Это не так, это просто старый ответ.

Mustache.js has 9kb, Handlebars.js has 86kb, or 18kb if using precompiled templates.

Чтобы увидеть преимущества производительности Handlebars.js, мы должны использовать предварительно скомпилированные шаблоны.

Источник:Обзор шаблонизаторов JavaScript

но существенное отличие состоит в том, как две библиотеки подходят к области видимости. Усы вернутся к родительской области, если не смогут найти переменную в текущем контексте; Рули вернут пустую строку.

Это едва упоминается в GitHub README, где для этого есть одна строка:

Handlebars deviates from Mustache slightly in that it does not perform recursive lookup by default.

Однако, как уже отмечалось, есть флаг, который заставляет руль вести себя так же, как усы - но это влияет на производительность.

Это влияет на то, как вы можете использовать# переменные как условные.

Например, в Усы вы можете сделать это:

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

В основном это означает, что «если переменная существует и является правдивой, выведите диапазон с переменной в ней». Но в руле вы должны либо:

use {{this}} instead use a parent path, i.e., {{../variable}} to get back out to relevant scope define a child variable value within the parent variable object

Подробнее об этом, если вы хотите их,Вот.

{{#property}}...{{/property}} блоки. Большинство реализаций усов будут просто подчиняться ложности JS здесь, а не рендерить блок, еслиproperty является'' или '0'.

Рулиwill сделать блок для'' а также0, но не другие ложные значения. Это может вызвать некоторые проблемы при переносе шаблонов.

 26 февр. 2016 г., 18:17
Хорошо знать! +1

действительно действует больше.

Теперь Handlebars.java позволяет нам использовать одни и те же языки шаблонов для клиента и сервера, что является большой победой для крупных проектов с более чем 1000 компонентами, которые требуют рендеринга на стороне сервера для SEO

Взгляни наhttps://github.com/jknack/handlebars.java

Mustache pros:

Very popular choice with a large, active community. Server side support in many languages, including Java. Logic-less templates do a great job of forcing you to separate presentation from logic. Clean syntax leads to templates that are easy to build, read, and maintain.

Mustache cons:

A little too logic-less: basic tasks (e.g. label alternate rows with different CSS classes) are difficult. View logic is often pushed back to the server or implemented as a "lambda" (callable function). For lambdas to work on client and server, you must write them in JavaScript.

Handlebars pros:

Logic-less templates do a great job of forcing you to separate presentation from logic. Clean syntax leads to templates that are easy to build, read, and maintain. Compiled rather than interpreted templates. Better support for paths than mustache (ie, reaching deep into a context object). Better support for global helpers than mustache.

Handlebars cons:

Requires server-side JavaScript to render on the server.

Источник:Шаблонное выбрасывание на стороне клиента: усы, руль, dust.js и многое другое

 25 нояб. 2015 г., 11:59
У Handlebars есть реализация сайта сервера и на Javagithub.com/jknack/handlebars.java
 27 февр. 2015 г., 17:14
Re Mustache con "Немного слишком логично". Я утверждаю, что CSS чередующихся строк должен выполняться с помощью псевдокласса CSS, такого какtr:nth-child(even) а такжеtr:nth-child(odd) или жеtr:nth-child(2n), Хотя это всего лишь пример, я чувствую, что (в большинстве случаев), если с усами что-то трудно или неловко, то вы делаете это неправильно; для этого есть лучшее место.

однако шаблоны Усов также могут быть скомпилированы.

Усу не хватает помощников и более продвинутых блоков, потому что он стремится быть логикой. Рули & APOS; Пользовательские помощники могут быть очень полезны, но часто в конечном итоге вводят логику в ваши шаблоны.

Усы имеют много разных компиляторов (JavaScript, Ruby, Python, C и т. Д.). Руль начался в JavaScript, сейчас есть такие проекты, какДжанго-рули, handlebars.java, Рули-рубиновый, Lightncandy (PHP), а такжеРули-ObjC.

 27 февр. 2014 г., 16:14
Не забывайте Scandlebars, реализацию Scala-Handlebars!
 15 июл. 2016 г., 22:24
Реализация Ruby требует интерпретатора JavaScript, так что это действительно не компилятор Ruby.

& # x2014; В дополнение к использованию & quot; this & quot; для руля и вложенной переменной в блоке переменных для усов вы также можете использовать вложенную точку в блоке для усов:

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

Ваш ответ на вопрос