erb, haml или slim: что вы посоветуете? И почему? [закрыто]

103

Я изучаю Rails и видел эти движки шаблонов. Опыта с ними не имею (только erb).

Но так как я новичок, я очень запутался. Какой из них вы предлагаете и почему? Эрб, Хамл или Слим? Расскажите, почему вы предпочитаете одно другому. А если у вас есть другие рекомендации, дайте нам знать.

РЕДАКТИРОВАТЬ: Я НЕ ищу здесь победителя. Я просто хочу услышать ваше мнение о них, их синтаксисе, скорости выполнения и так далее.

Омид Камангар
источник
7
Короткий ответ: как новичок, используйте ERB.
Скотт Шультесс
Хотя это и не шаблонизатор, вы можете изучить разработанный мною гем dom . Это позволяет вам, казалось бы, писать HTML-коды как Ruby.
sawa
15
Этот «неконструктивный» вопрос оказался для меня невероятно полезным. Спасибо, что спросили, даже если моды по какой-то причине не считают, что он подходит. Это был один из лучших хитов Google, и многие ответы здесь помогли мне принять решение.
Энди Бэрд
2
это по-прежнему №1 в Google по запросу 'rails html erb'
Orwellophile

Ответы:

67

ERB хорош в основном, если у вас есть веб-дизайнер, который будет работать с простым HTML и не знает ни haml, ни slim. Таким образом, он может писать HTML, а вы можете встроить рубиновую логику с соответствующими тегами.

Если вы работаете и над HTML, и над рубиновой логикой, или ваш дизайнер готов изучить что-то новое (например, HAML), я бы выбрал HAML. Он намного более дружелюбен к рубину, значительно сокращает количество символов и намного удобнее, чем ERB.

Например (взято с официального сайта HAML ):

В ERB ваше представление будет выглядеть так:

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

В HAML это будет выглядеть так:

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

Намного чище!

Что касается разницы между HAML и SLIM - я никогда толком не работал с SLIM, но думаю, это дело вкуса - взгляните на оба синтаксиса и решите, какой из них вам больше нравится. Я не думаю, что между этими двумя (HAML / SLIM) есть явный победитель.

Эрез Рабих
источник
Прочтите - последнее предложение об окончательном победителе было о HAML и SLIM (отредактировано должным образом).
Erez Rabih
1
Да, +1 за это, хотя Haml & Slim вытаскивают весь мусор из HTML и из-за отсутствия лучшей фразы, чертовски круто, многие люди, использующие только HTML, просто не могут понять это (или 'Не ручное кодирование в первую очередь, или полагаться на фрагменты и копировальную пасту.)
ocodo
8
@ErezRabih на самом деле существует большая разница между HAML и SLIM. Slim намного быстрее, чем HAML. Она также имеет синтаксис чище, и позволяет писать HTML атрибуты более аккуратно: a href="foo".
Mohamad
87

Два больших преимущества использования slim по сравнению с haml:

  1. Slim сейчас примерно в восемь раз быстрее, чем haml.

  2. Slim поддерживает потоковую передачу HTTP, а HAML - нет.

  3. Slim имеет более естественный синтаксис: a href="foo.html"

Барт тен Бринке
источник
3
У вас есть надежный источник вашего утверждения о скорости Slim vs Haml? Я много читал об этом повсюду, но, за исключением страницы Slim GitHub, я не нахожу много доказуемой информации об этом.
Джошуа Мухейм
4
@JoshuaMuheim Slim поставляется с тестовым кодом, который вы можете изменить / протестировать на своем собственном компьютере: github.com/stonean/slim#testing
Джерри,
5
+1 Slim поддерживает потоковую передачу HTTP, у нас возникли проблемы с нашим платежным шлюзом и Heroku, похоже, что потоковая передача HTTP - это способ решить эту проблему, но поскольку наше приложение работает с HAML, это решение больше не
подходит
1
@DamianNowak Я думаю, что ваше утверждение слишком обобщено. Вы, вероятно, имеете в виду, что скорость не обязательно должна быть решающим фактором, учитывая другие факторы. Кроме того, что, если библиотека была достаточно медленной, чтобы стать узким местом? Я уверен, что тогда разработчики заметят это. Devs действительно должен дать некоторый вес скорость, или они не были бы очень умными, а?
Кельвин
16
Преждевременная оптимизация - не лучшая идея, если она требует много дополнительной работы, но просто выбрать одну подобную библиотеку вместо другой из-за значительного повышения производительности не преждевременно.
Jamon Holmgren
35

Сверху моей головы это то, что я придумал

ЕРБ :

Плюсы

  • по умолчанию из коробки
  • не зависит от пробелов
  • самый низкий барьер входа (если исходящий из HTML), так как его HTML с добавленным кодом Ruby
  • большинство лексеров IDE читают его по умолчанию
  • DHH предпочитает это
  • устаревшие приложения, вероятно, все еще используют его

Минусы

  • более подробный
  • Теги content_for в помощниках и представлениях могут быстро выйти из-под контроля
  • Теги content_for усложняют вложение тегов, поскольку erb возвращает только последнюю строку в блоке. поэтому вам нужно добавить к строке, а затем вернуть ее.

HAML

Плюсы

  • более лаконично. без закрывающих тегов, подходит для небольших экранов
  • визуально более чистая структура
  • имеет встроенные помощники (haml_concat, haml_capture) для использования haml во вспомогательных методах
  • цепочка классов
  • много полезного синтаксического сахара, например # для div или. для цепочки классов или: javascript для тегов JS

Минусы

  • зависит от пробелов, из-за чего иногда возникают серьезные ошибки
  • сложные теги обычно должны прибегать к «хэш-формату». (Хотя я на самом деле думаю, что это отличный пример гибкости для начинающего, это может быть болезненно.)
  • добавлен как драгоценный камень (опять же, вероятно, натянуто, чтобы сказать это как мошенничество)
  • у дизайнеров могут возникнуть проблемы с настройкой
  • в дополнение к общему предупреждению о пробелах ... простые ошибки с пробелами, например. табуляции и пробелы для отступов могут привести к ошибкам на страницах в продакшене, которые не улавливаются обычными спецификациями / тестами. Мораль: ожидайте большей потребности в тестах просмотра и, возможно, не используйте haml для критически важных представлений, если вы не уверены, что ваши тесты проверяют фактическое отображение представления.
  • медленнее (чем erb)
    • предостережение: мы говорим о рубиновом коде, если скорость является проблемой блокировки в вашем приложении, существуют альтернативы рубину, например haskell
инженер Дэйв
источник
Я бы добавил, что Haml работает медленнее, чем erb, как недостаток.
bkunzi01
Ага. для уверенности. Я добавил это
инженер
1
Если вам нравится HAML и вы беспокоитесь о производительности, попробуйте Hamlit. Я заметил значительное улучшение скорости рендеринга в моих приложениях почти так же быстро, как ERB. github.com/k0kubun/hamlit
Хорхе Наджера Т.
21

Вопрос для меня сводится к тому, что вы предпочитаете ставить %перед каждым тегом или |перед каждым новым блоком текста?

Тонкий:

 tag(attr= "value")
  | text

Хамл:

 %tag{attr: "value"}
   text

Еще одна вещь, на которую следует обратить внимание: haml предполагает пробел между новыми строками ( удалить пробелы в haml ), в то время как slim не предполагает пробела (добавьте пробелы в Slim здесь и здесь )

Монреальмайк
источник
9
+1. Но канал не нужен для текста в той же строке, что и тег. Это необходимо только в том случае, если первая строка текста внутри тега не находится в той же строке, что и тег. Каждая строка после первой не нуждается в канале из-за отступов.
Кельвин
Мне действительно нравится этот аспект slim, так как мне очень сложно писать немеждународные строки.
KonstantinK
обязательно |для каждого блока текста, %для каждого тега. Тегов гораздо больше, чем блоков буквального текста. Небольшая, но семантическая победа для меня с slim заключается в том, что любому необработанному буквальному html с <>используемыми тегами предшествует явный |. Я предпочитаю «все тонкое, если вы явно не сделаете это буквально с помощью |« over », все будет буквально, пока вы не сделаете это с помощью a» %.
anbizcad
Я думаю, что Slim больше похож на HTML ( attr="value"), а Haml больше похож на Ruby ( {key: "value"}например, на Hash).
Франклин Ю.
16

https://github.com/scalp42/hamlerbslim - это независимый тест, который показывает Slim и Erb в качестве победителей с точки зрения производительности (Slim также имеет тенденцию уменьшать размер вывода HTML).

Мое личное мнение таково, что в целом Slim and Haml сэкономит ваше время (== деньги) в плане обслуживания, если у вас будут опытные люди, которые будут следить за вашими взглядами.

Если у вас нет таких людей, Erb определенно вам подойдет, потому что, несмотря на все желания в мире, есть много очень недорогих людей, которые могут работать с HTML / Erb, но считают Haml / Slim полноценным тайна.

Лучше всего обучить этих людей использованию Slim или хотя бы познакомить их с ним, и сохранить количество тех, кто «понял».

окодо
источник