В чем отличия между Mustache.js и Handlebars.js?
Основные различия, которые я видел, следующие:
- Handlebars добавляет #if, #unless, #with и #each
- Handlebars добавляет помощников
- Шаблоны Handlebars скомпилированы (Mustache может быть слишком)
- Handlebars поддерживает paths
- Позволяет использовать {{this}} в блоках (который выводит текущее значение строки элемента)
- Handlebars.SafeString() (и, возможно, некоторые другие методы)
- Handlebars от 2 до 7 раз быстрее
- Усы поддерживает перевернутые разделы (т.е.
if !x ...
)
(Пожалуйста, поправьте меня, если я ошибаюсь в вышеупомянутом.)
Есть ли другие существенные отличия, которые мне не хватает?
Ответы
Ответ 1
Вы довольно много прибивали его, однако шаблоны Усачей также могут быть скомпилированы.
Усы отсутствуют помощники и более продвинутые блоки, потому что он стремится быть безболезненным. Пользовательские помощники Handlebars могут быть очень полезными, но часто в конечном итоге вводят логику в ваши шаблоны.
Усы есть много разных компиляторов (JavaScript, Ruby, Python, C и т.д.). Ручки начали работать в JavaScript, теперь есть проекты типа django-handlebars, handlebars.java, handlebars-ruby, lightncandy (PHP) и handlebars-objc.
Ответ 2
Усы усов:
- Очень популярный выбор с большим, активным сообществом.
- Поддержка на стороне сервера на многих языках, включая Java.
- Шаблоны без логики делают большую работу заставляя вас отделять представление от логики.
- Чистый синтаксис приводит к шаблонам, которые легко создавать, читать и поддерживать.
Усатые минусы:
- Не слишком логично: основные задачи (например, чередующиеся строки с разными классами CSS) сложны.
- Просмотр логики часто отбрасывается на сервер или реализуется как "лямбда" (вызываемая функция).
- Чтобы lambdas работал на клиенте и сервере, вы должны записать их в JavaScript.
Профили Handlebars:
- Шаблоны без логики делают большую работу заставляя вас отделять представление от логики.
- Чистый синтаксис приводит к шаблонам, которые легко создавать, читать и поддерживать.
- Скомпилированные, а не интерпретированные шаблоны.
- Лучшая поддержка путей, чем усы (т.е. углубление в объект контекста).
- Лучшая поддержка глобальных помощников, чем усы.
Руки минус:
- Требуется серверный JavaScript для рендеринга на сервере.
Источник: Клиентская настройка шаблонов: усы, рули, dust.js и т.д.
Ответ 3
Одно тонкое, но существенное различие заключается в том, как две библиотеки приближаются к сфере охвата. Усы возвращаются в родительскую область, если не могут найти переменную в текущем контексте; Ручки возвратят пустую строку.
Это почти не упоминается в GitHub README, где есть одна строка для него:
Ручные панели немного отклоняются от Усы, поскольку они не выполняют рекурсивный поиск по умолчанию.
Однако, как отмечено в этом документе, существует флаг, позволяющий манипулировать ручками так же, как и Усы, но это влияет на производительность.
Это влияет на то, как вы можете использовать переменные #
в качестве условных обозначений.
Например, в Mustache вы можете сделать это:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
В основном это означает "если переменная существует и правдива, напечатайте span с переменной в ней". Но в Handlebars вам нужно либо:
- используйте
{{this}}
вместо
- используйте родительский путь, т.е.
{{../variable}}
, чтобы вернуться в соответствующую область.
- определить дочернее значение
variable
в родительском объекте variable
Подробнее об этом, если вы хотите, здесь.
Ответ 4
ПРИМЕЧАНИЕ. Этот ответ устарел. Это было верно в то время, когда оно было опубликовано, но больше не существует.
Усы имеют интерпретаторы на многих языках, а Handlebars - только для Javascript.
Ответ 5
Другим различием между ними является размер файла:
Чтобы увидеть преимущества производительности Handlebars.js, мы должны использовать предварительно скомпилированные шаблоны.
Источник: Обзор движков JavaScript по шаблонам
Ответ 6
Еще одна тонкая разница заключается в обработке значений фальши в блоках {{#property}}...{{/property}}
. Большинство реализаций усов будут просто подчиняться JS-ложности здесь, а не отображать блок, если property
- ''
или '0'.
Ручки будут отображать блок для ''
и 0
, но не другие значения фальши. Это может вызвать некоторые проблемы при переносе шаблонов.
Ответ 7
Я чувствую, что один из упомянутых минусов для "Handlebars" больше не действует.
Handlebars.java теперь позволяет нам использовать одни и те же языки шаблонов для клиента и сервера, что является большой победой для крупных проектов с 1000 + компонентами, для которых требуется рендеринг серверов для SEO
Взгляните на https://github.com/jknack/handlebars.java
Ответ 8
- Помимо использования "this" для дескрипторов и вложенной переменной в переменном блоке для усов, вы также можете использовать вложенную точку в блоке для усов:
{{#variable}}<span class="text">{{.}}</span>{{/variable}}