erb, haml veya slim: hangisini önerirsiniz? Ve neden? [kapalı]


103

Rails öğreniyorum ve bu şablon motorlarını gördüm. Onlarla hiçbir tecrübem yok (sadece erb).

Ama yeni başlayan biri olduğum için gerçekten kafam karıştı. Hangisini önerirsiniz ve neden? Erb, Haml veya Slim? Lütfen birini diğerlerine tercih etme nedeninizi söyleyin. Başka önerileriniz varsa lütfen bize bildirin.

DÜZENLEME: Burada bir kazanan ARAMIYORUM. Sadece onlar hakkındaki fikirlerinizi, sözdizimlerini, uygulama hızlarını vb. Duymak istiyorum.


7
Kısa cevap, başlangıç ​​seviyesi olarak ERB kullanmaktır.
Scott Schulthess


Bir şablon motoru olmasa da , geliştirdiğim dom gemine bakmak isteyebilirsiniz . Ruby olarak HTML kodlarını görünüşte yazmanıza izin verir.
sawa

15
Bu "yapıcı olmayan" soru benim için inanılmaz derecede yardımcı oldu. Sorduğunuz için teşekkürler, her ne sebeple olursa olsun modlar uygun olduğunu düşünmese bile. Bu, google'ın en popüler hitlerinden biriydi ve buradaki birçok cevap kararımı vermeme yardımcı oldu.
Andy Baird

2
hala 'rails html erb' için 1 numaralı google sonucudur
Orwellophile

Yanıtlar:


67

ERB, özellikle düz HTML üzerinde çalışacak ve ne haml ne de slim bilmeyen bir web tasarımcınız varsa iyidir. Bu şekilde o HTML yazabilir ve yakut mantığını uygun etiketlerle yerleştirebilirsiniz.

Hem HTML hem de ruby ​​mantığı üzerinde çalışıyorsanız veya tasarımcınız yeni bir şey öğrenmeye hazırsa (HAML gibi) HAML'yi tercih ederim. Çok daha yakut dostudur, karakter sayısını ERB'den çok daha fazla ve çok daha okunabilir bir şekilde azaltır.

Örneğin (resmi HAML sitesinden alınmıştır ):

ERB'de görüşünüz şöyle görünecektir:

<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'deyken şöyle görünecektir:

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

Çok daha temiz!

HAML ve SLIM arasındaki farka gelince - SLIM ile hiç çalışmadım ama sanırım bu bir zevk meselesi - her iki sözdizimine de bir göz atın ve hangisinin sizin için daha iyi göründüğüne karar verin. Bu ikisi arasında kesin bir kazanan olduğunu sanmıyorum (HAML / SLIM).


Okuyun - kesin kazananla ilgili son cümle HAML ve SLIM hakkındaydı (uygun şekilde düzenlendi).
Erez Rabih

1
Evet, bunun için +1, Haml & Slim HTML'den tüm gereksiz şeyleri çıkarıp daha iyi bir ifade istese de, tamamen müthiş, sadece HTML kullanan pek çok kişi bunu anlamıyor (veya İlk etapta el kodlayıcılar ya da pasajlara ve kopya-makarnaya güvenmeyin.)
ocodo

8
@ErezRabih aslında HAML ve SLIM arasında büyük bir fark var. Slim, HAML'den çok daha hızlıdır. Aynı zamanda daha temiz bir sözdizimi vardır ve HTML daha temiz niteliklerini yazmayı sağlar: a href="foo".
Mohamad

87

Slim'i haml'a göre kullanmanın iki büyük avantajı:

  1. Slim şu anda haml'den yaklaşık sekiz kat daha hızlı.

  2. Slim, HTTP akışını desteklerken HAML desteklemez.

  3. Slim'in daha doğal bir sözdizimi vardır: a href="foo.html"


3
Slim vs Haml hızıyla ilgili ifadeniz için güvenilir bir kaynağınız var mı? Her yerde bu konu hakkında çok şey okudum, ancak Slim'in GitHub sayfası dışında bu konuda kanıtlanabilir pek fazla bilgi bulamıyorum.
Joshua Muheim

4
@JoshuaMuheim Slim, kendi makinenizde değiştirebileceğiniz / test edebileceğiniz kıyaslama koduyla birlikte gelir: github.com/stonean/slim#testing
Gerry

5
+1 Slim HTTP akışını destekliyor, ödeme Ağ Geçidi ve Heroku ile ilgili sorunlar yaşıyoruz, HTTP akışının bu sorunu çözmenin bir yolu olduğu görülüyor ancak uygulamamız HAML ile çalıştığı için bu çözüm artık bir seçenek değil
Flov

1
@DamianNowak İfadenizin aşırı genel olduğunu düşünüyorum. Muhtemelen, diğer faktörler göz önüne alındığında, hızın mutlaka belirleyici faktör olmaması gerektiğini söylüyorsunuz. Ayrıca, bir kitaplık darboğaz oluşturacak kadar yavaşsa ne olur? Eminim geliştiriciler bunu dikkate alır. Devler hıza biraz ağırlık vermek zorunda, yoksa çok akıllı olmazlar, ha?
Kelvin

16
Erken optimizasyon, çok fazla ek çalışma gerektiriyorsa iyi bir fikir değildir, ancak önemli bir performans avantajı nedeniyle benzer bir kitaplığı diğerine tercih etmek erken değildir.
Jamon Holmgren

35

Kafamın tepesinde, bulduğum şey bu

ERB :

Artıları

  • kutunun dışında varsayılan
  • beyaz alana bağlı değil
  • Ruby kodu serpiştirilmiş HTML olarak en düşük giriş engeli (HTML'den geliyorsa)
  • çoğu IDE'nin sözcükleri varsayılan olarak okur
  • DHH bunu tercih ediyor
  • eski uygulamalar muhtemelen hala kullanıyor

Eksileri

  • daha ayrıntılı
  • yardımcılar ve görünümlerdeki etiketler için content_for hızla kontrolden çıkabilir
  • content_for etiketleri, erb bloğun yalnızca son satırını döndürdüğünden etiketlerin iç içe geçmesini zorlaştırır. bu yüzden bir dizgeye eklemeniz ve sonra onu döndürmeniz gerekir.

HAML

Artıları

  • daha özlü. kapanış etiketi yok, daha küçük ekranlara sığar
  • görsel olarak daha temiz yapı
  • yardımcı yöntemlerde haml kullanmak için yardımcılar (haml_concat, haml_capture) oluşturdu
  • sınıf zincirleme
  • divs için # veya. sınıf zinciri için veya: JS etiketleri için javascript

Eksileri

  • boşluklara bağımlıdır, bu da zaman zaman bazı zor hataların çözülmesini sağlar
  • karmaşık etiketlerin genellikle "karma" biçimine başvurması gerekir. (Aslında bunun, yeni başlayan biri için harika bir esneklik örneği olduğunu düşünmeme rağmen, bir acı olabilir.)
  • bir mücevher olarak eklendi (yine muhtemelen bunu bir con olarak koymak için bir streç)
  • tasarımcılar ayarlamada biraz sorun yaşayabilir
  • genel boşluk uyarısına ek olarak ... basit boşluk hataları örn. girinti için sekmeler ve boşluklar, normal özelliklerin / testin yakalayamayacağı üretimde sayfaların hatalı olmasına neden olabilir. Ahlaki: Görüntüleme testleri için daha fazla ihtiyaç bekleyin ve testlerinizin görünümün gerçek görüntüsünü test ettiğinden emin değilseniz, muhtemelen görev açısından kritik görünümler için haml kullanmayın.
  • daha yavaştır (erb'den)
    • uyarı: bu ruby ​​kodudur, uygulamanızda hız bir engelleme sorunu ise, ruby'ye alternatifler vardır, örneğin haskell

Eklemek isterim ki, Haml bir aleyhte erb'den daha yavaş performans konusunda bilgili.
bkunzi01

Evet. kesinlikle. Bunu ekledim
mühendisDave

1
HAML'yi seviyorsanız ve performans konusunda endişeleriniz varsa, Hamlit'i deneyin. Uygulamalarımda neredeyse ERB kadar hızlı işleme hızında büyük bir gelişme gördüm. github.com/k0kubun/hamlit
Jorge Najera T

21

Benim için soru aşağıya geliyor, %her etiketin |önüne mi yoksa her yeni metin bloğunun önüne mi koymayı tercih edersiniz ?

İnce:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

Dikkat edilmesi gereken bir şey daha: haml yeni satırlar arasında beyaz bir boşluk varsayar (haml'deki beyaz boşluğu kaldırın ), ince boşluk olmadığını varsayar (Slim'e buraya ve buraya boşluk ekleyin )


9
+1. Ancak etiketle aynı satırdaki metin için boru gerekli değildir. Yalnızca bir etiketin içindeki metnin ilk satırı etiketle aynı satırda değilse gereklidir. İlk satırdan sonraki her satır, girinti nedeniyle boruya ihtiyaç duymaz.
Kelvin

Aslında zayıflığın bu yönünü seviyorum çünkü uluslararasılaştırılmamış dizeler yazmamı daha da zorlaştırıyor.
KonstantinK

her etiket için kesinlikle |her metin bloğu %için. Değişmez metin bloklarından çok daha fazla etiket vardır. Slim ile benim için küçük ama anlamsal bir kazanç, <>kullanılan etiketlere sahip herhangi bir ham değişmez html'den önce bir açıklık gelmesidir |. Ben "her şeyin ince olduğunu, açıkça |" üzerinde " ile gerçek yapmadığınız sürece her şeyin gerçek olduğunu tercih ederim %.
ahnbizcad

Bence Slim daha çok HTML'ye ( attr="value") benzerken, Haml daha çok Ruby'ye ( {key: "value"}Hash gibi) benziyor.
Franklin Yu

16

https://github.com/scalp42/hamlerbslim - Slim ve Erb'i kazanan olarak gösteren bağımsız bir ölçüt, performans açısından (zayıf, HTML çıktı boyutunu da küçültme eğilimindedir.)

Kişisel görüşüm, genel olarak Slim ve Haml'ın bakım açısından size zaman (== para) kazandıracağı ve sizin görüşlerinize bakan Haml / Slim konusunda bilgili insanlara sahip olmanızdır.

Bu insanlara sahip değilseniz, Erb kesinlikle gitmenin yoludur, çünkü dünyadaki en iyi iradeye rağmen, HTML / Erb ile çalışabilen, ancak Haml / Slim'i eksiksiz bulabilen çok ucuz birçok insan vardır. gizem.

Hepsinden iyisi, bu insanları Slim'i kullanmaları için eğitin ya da en azından onlara maruz bırakarak "anlayan" kişilerin sayılarını saklayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.