erb, haml або slim: який із них ви пропонуєте? І чому? [зачинено]


103

Я вивчаю Rails, і я бачив ці двигуни шаблонів. Я не маю досвіду з ними (тільки erb).

Але оскільки я початківець, я дуже розгублений. Який із них ви пропонуєте і чому? Ерб, Хамл або Слім? Скажіть, будь ласка, свою причину віддати перевагу одній над іншими. І якщо у вас є якісь інші рекомендації, повідомте нас про це.

EDIT: Я тут не шукаю переможця. Я просто хочу почути вашу думку про них, їх синтаксис, швидкість виконання тощо.


7
Коротка відповідь, як початківець, використовуйте ERB.
Скотт Шультесс


Хоча це не двигун шаблону, можливо, ви захочете заглянути в дорогоцінний камінь, який я розробив. Це дозволяє вам, здавалося б, писати HTML-коди як Ruby.
sawa

15
Це "не конструктивне" питання було неймовірно корисним для мене. Дякуємо за запитання, навіть якщо модники з будь-якої причини не вважають, що це підходить. Це був один із найкращих хітів Google, і багато відповідей тут допомогли мені прийняти рішення.
Енді Бейрд

2
це все-таки результат №1 google для 'rails html erb'
Orwellophile

Відповіді:


67

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

Якщо ви працюєте над HTML і рубінною логікою, або ваш дизайнер готовий дізнатися щось нове (наприклад, HAML), я б пішов на HAML. Це набагато зручніше до рубіну, значно зменшує кількість чарівників і набагато читає, ніж ЄРБ.

Наприклад (взято з офіційного сайту 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 (відредаговано належним чином).
Ерез Рабіх

1
Так, +1 для цього, навіть незважаючи на те, що Haml & Slim витягують з HTML весь мотлох і шукають кращої фрази, абсолютно дивовижно, дуже багато людей, які працюють лише з HTML, просто не можуть обернутися головою (або не 't handcoders в першу чергу, або покладатися на фрагменти та копію-пасту.)
ocodo

8
@ErezRabih насправді є велика різниця між HAML та SLIM. Тонкий набагато швидше, ніж HAML. Вона також має синтаксис чистіше, і дозволяє писати HTML атрибути більш акуратно: a href="foo".
Мохамад

87

Дві великі переваги використання slim over haml:

  1. Тонкий в даний час приблизно у вісім разів швидше, ніж хамль.

  2. Slim підтримує протокол HTTP, а HAML - ні.

  3. Slim має більш природний синтаксис: a href="foo.html"


3
Чи є у вас надійне джерело для вашої заяви про швидкість Slim vs Haml? Я багато читаю про це скрізь, але, окрім сторінки GitHub Slim, я не знаходжу багато достовірної інформації про це.
Джошуа Мухайм

4
@JoshuaMuheim Slim поставляється з базовим кодом, який ви можете змінити / протестувати на власній машині: github.com/stonean/slim#testing
Джеррі

5
+1 Slim підтримує протокол HTTP, у нас виникають проблеми з нашими платіжними шлюзами та Heroku. Схоже, потоковий протокол HTTP - це спосіб вирішити цю проблему, але оскільки наша програма працює з HAML, це рішення вже не є варіантом
Flov

1
@DamianNowak Я думаю, що ваше твердження є надто узагальненим. Ви, мабуть, означаєте, що швидкість не обов'язково повинна бути визначальним фактором, враховуючи інші фактори. Крім того, що робити, якщо бібліотека була досить повільною, щоб стати вузьким місцем? Я впевнений, що тоді дияволи помітять. Діви повинні приділяти швидкість деякій вазі, інакше вони були б не дуже розумні, так?
Келвін

16
Передчасна оптимізація не є хорошою ідеєю, якщо вона вимагає багато додаткової роботи, але просто вибір однієї подібної бібліотеки над іншою через значну користь від продуктивності не є передчасним.
Джеймон Холмгрен

35

Це я придумав у верхній частині голови

ЄРБ :

Плюси

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

Мінуси

  • більш багатослівний
  • Теги content_for у помічниках та переглядах можуть швидко вийти з ладу
  • Теги content_for ускладнюють вкладення тегів, оскільки erb повертає лише останній рядок у блоці. тож вам потрібно додати рядок, а потім повернути його.

HAML

Плюси

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

Мінуси

  • залежність пробілу, що робить часом деякі важкі помилки
  • Складні теги, як правило, повинні вдаватися до формату "хеш". (Хоча я справді думаю, що це чудовий приклад гнучкості для того, хто починає, це може бути болем.)
  • додано як дорогоцінний камінь (знову, мабуть, розтяжка, щоб поставити це як кон)
  • у дизайнерів можуть виникнути проблеми з налаштуванням
  • на додаток до загального попередження пробілу ... прості помилки пробілу, наприклад. вкладки та пробіли для відступу можуть спричинити помилки у виробництві, які звичайні характеристики / тести не зможуть наздогнати. Мораль: очікуйте більшої потреби в тестах перегляду та, можливо, не використовуйте haml для критичних представлень місії, якщо ви не впевнені, що ваші тести перевіряють фактичне відображення подання.
  • повільніше (ніж erb)
    • нюанс: це рубіновий код, про який ми говоримо, якщо швидкість є проблемою, що блокує, у вашій програмі є альтернативи рубіну, наприклад, haskell

Додам, що Хамл має меншу ефективність, ніж Erb як кон.
bkunzi01

Так. точно. Я додав , що один
engineerDave

1
Якщо вам подобається HAML і ви переживаєте за продуктивність, спробуйте Hamlit. Я побачив значне покращення швидкості візуалізації в своїх додатках майже так само швидко, як і ERB. github.com/k0kubun/hamlit
Хорхе

21

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

Тонкий:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

Ще одна річ, на яку слід звернути увагу: haml передбачає пробіл між новими рядками ( видаліть пробіли в haml ), тоді як slim не передбачає місця (додайте пробіли в Slim тут і тут )


9
+1. Але труба не потрібна для тексту в тому ж рядку, що і тег. Це потрібно лише в тому випадку, якщо перший рядок тексту всередині тегу не в тому ж рядку, що і в тезі. Кожен рядок після першого не потребує труби через відступ.
Келвін

Мені справді подобається цей тонкий аспект, оскільки це ускладнює мені написання неінтернаціоналізованих рядків.
КостянтинК

безумовно, |для кожного блоку тексту %для кожного тегу. Набагато більше тегів, ніж блоків буквального тексту. Невеликий, але смислова перемога для мене тонка, що будь-який сирої буквальним HTML з <>тегами , які використовуються передує явним |. Я віддаю перевагу "все тонке, якщо ви прямо не зробите це буквально з |" над "все буквально, поки ви не зробите це з %
хмелем

Я думаю, що Slim більше схожий на HTML ( attr="value"), тоді як Haml більше схожий на Ruby ( {key: "value"}як Hash).
Франклін Ю

16

https://github.com/scalp42/hamlerbslim - це незалежний орієнтир, який показує Slim та Erb як переможців, ефективнішими (slim має тенденцію до зменшення розміру виводу HTML).

Моя особиста думка полягає в тому, що в цілому, Slim і Haml заощадять ваш час (== гроші) в плані обслуговування, за умови, що у вас є Haml / Slim кмітливі люди, котрі доглядають ваших поглядів.

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

Найкраще з усіх випадків, навчіть цих людей використовувати Slim або принаймні виставити їх на нього та зберегти номери тих, хто «отримує його».

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.