erb, haml or slim: mana yang Anda sarankan? Dan mengapa? [Tutup]

103

Saya mempelajari Rails dan saya telah melihat mesin template ini. Saya tidak punya pengalaman dengan mereka (hanya erb).

Tapi karena saya seorang pemula, saya sangat bingung. Mana yang Anda sarankan dan mengapa? Erb, Haml atau Slim? Tolong beri tahu alasan Anda memilih salah satu daripada yang lain. Dan jika Anda memiliki rekomendasi lain, beri tahu kami.

EDIT: Saya TIDAK mencari pemenang di sini. Saya hanya ingin mendengar pendapat Anda tentang mereka, sintaksisnya, kecepatan eksekusi, dan sebagainya.

Omid Kamangar
sumber
7
Jawaban singkatnya adalah, sebagai pemula, gunakan ERB.
Scott Schulthess
Meskipun bukan mesin templat, Anda mungkin ingin melihat permata dom yang telah saya kembangkan. Ini memungkinkan Anda untuk menulis kode HTML sebagai Ruby.
sawa
15
Pertanyaan "tidak membangun" ini sangat membantu saya. Terima kasih telah menanyakannya, meskipun mod karena alasan apa pun tidak terasa cocok. Itu adalah salah satu top google hits dan banyak jawaban di sini membantu saya membuat keputusan.
Andy Baird
2
ini masih merupakan hasil google # 1 untuk 'rails html
erb

Jawaban:

67

ERB bagus terutama jika Anda memiliki perancang web yang akan bekerja pada HTML biasa dan tidak tahu haml atau slim. Dengan cara ini dia bisa menulis HTML dan Anda bisa menyematkan logika ruby ​​dengan tag yang tepat.

Jika Anda bekerja pada HTML dan logika ruby, atau desainer Anda siap untuk mempelajari sesuatu yang baru (seperti HAML), saya akan memilih HAML. Ini jauh lebih ramah rubi, mengurangi jumlah karakter dan lebih mudah dibaca daripada ERB.

Misalnya (diambil dari situs resmi HAML ):

Di ERB tampilan Anda akan terlihat seperti ini:

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

Sedangkan di HAML akan terlihat seperti ini:

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

Jauh lebih bersih!

Adapun perbedaan antara HAML dan SLIM - Saya tidak pernah benar-benar bekerja dengan SLIM tapi saya rasa ini masalah selera - lihat kedua sintaksisnya dan putuskan mana yang terlihat lebih baik di mata Anda. Saya kira tidak ada pemenang pasti di antara keduanya (HAML / SLIM).

Erez Rabih
sumber
Bacalah - kalimat terakhir tentang pemenang definitif adalah tentang HAML dan SLIM (diedit dengan benar).
Erez Rabih
1
Ya, +1 untuk ini, meskipun Haml & Slim menarik semua sampah dari HTML dan menginginkan frasa yang lebih baik, benar-benar keren, banyak orang yang hanya HTML tidak bisa memahaminya (atau aren di tempat pertama, atau bergantung pada potongan dan copy-pasta.)
ocodo
8
@ErezRabih sebenarnya ada perbedaan besar antara HAML dan SLIM. Slim jauh lebih cepat dari HAML. Ini juga memiliki sintaks bersih, dan memungkinkan Anda untuk menulis atribut HTML lebih bersih: a href="foo".
Mohamad
87

Dua keuntungan besar menggunakan slim over haml:

  1. Slim saat ini sekitar delapan kali lebih cepat dari haml.

  2. Slim mendukung streaming HTTP, sedangkan HAML tidak.

  3. Slim memiliki sintaks yang lebih alami: a href="foo.html"

Bart ten Brinke
sumber
3
Apakah Anda memiliki sumber terpercaya untuk pernyataan Anda tentang kecepatan Slim vs Haml? Saya membaca banyak tentang ini di mana-mana, tetapi kecuali di halaman GitHub Slim, saya tidak menemukan banyak informasi yang dapat dibuktikan tentangnya.
Joshua Muheim
4
@JoshuaMuheim Slim hadir dengan kode patokan yang dapat Anda modifikasi / uji pada mesin Anda sendiri: github.com/stonean/slim#testing
Gerry
5
+1 Slim mendukung streaming HTTP, kami mengalami masalah dengan Gateway pembayaran dan Heroku kami, tampaknya streaming HTTP adalah cara untuk mengatasi masalah ini tetapi karena aplikasi kami berjalan dengan HAML, solusi ini bukan lagi pilihan
Flov
1
@DamianNowak Saya pikir pernyataan Anda terlalu digeneralisasikan. Mungkin maksud Anda kecepatan tidak selalu menjadi faktor penentu, mengingat faktor lain. Juga, bagaimana jika perpustakaan cukup lambat untuk menjadi penghambat? Saya yakin devs akan memperhatikannya. Pengembang harus memberikan beberapa berat untuk kecepatan, atau mereka tidak akan sangat cerdas, eh?
Kelvin
16
Pengoptimalan prematur bukanlah ide yang baik jika memerlukan banyak pekerjaan tambahan, tetapi memilih satu pustaka serupa daripada yang lain karena manfaat kinerja yang signifikan bukanlah hal yang prematur.
Jamon Holmgren
35

Di luar kepalaku inilah yang aku pikirkan

ERB :

Pro

  • default di luar kotak
  • tidak tergantung pada ruang putih
  • penghalang masuk terendah (jika berasal dari HTML) sebagai HTML-nya dengan kode Ruby yang ditaburkan
  • kebanyakan lexers IDE membacanya secara default
  • DHH lebih memilihnya
  • aplikasi lama mungkin masih menggunakannya

Kontra

  • lebih bertele-tele
  • content_for tag di pembantu dan tampilan bisa lepas kendali dengan cepat
  • tag content_for mempersulit tag bersarang karena erb hanya mengembalikan baris terakhir di blok. jadi Anda harus menambahkan string dan mengembalikannya.

HAML

Pro

  • lebih ringkas. tidak ada tag penutup, muat di layar yang lebih kecil
  • struktur yang lebih bersih secara visual
  • telah membangun pembantu (haml_concat, haml_capture) untuk memanfaatkan haml dalam metode pembantu
  • class chaining
  • banyak gula sintaksis yang berguna seperti # untuk div atau. untuk class chaining, atau: javascript untuk tag JS

Kontra

  • tergantung spasi yang terkadang membuat kesalahan sulit untuk diketahui
  • tag kompleks biasanya perlu menggunakan format "hash". (Meskipun saya benar-benar berpikir ini adalah contoh fleksibilitas yang bagus bagi seseorang yang memulai, itu bisa menyebalkan.)
  • ditambahkan sebagai permata (sekali lagi mungkin peregangan untuk menempatkan ini sebagai penipu)
  • desainer mungkin mengalami kesulitan menyesuaikan
  • selain peringatan spasi putih umum ... kesalahan spasi putih sederhana misalnya. tab dan spasi untuk indentasi, dapat menyebabkan kesalahan dalam produksi halaman yang tidak dapat ditangkap oleh spesifikasi / pengujian normal. Moral: Harapkan kebutuhan yang lebih besar untuk pengujian tampilan dan mungkin jangan gunakan haml untuk tampilan kritis misi, kecuali Anda yakin bahwa pengujian Anda menguji rendering tampilan yang sebenarnya.
  • lebih lambat (dari erb)
    • peringatan: ini adalah kode ruby ​​yang sedang kita bicarakan jika kecepatan adalah masalah pemblokiran dalam aplikasi Anda, ada alternatif selain ruby, misalnya haskell
engineerDave
sumber
Saya akan menambahkan bahwa kinerja Haml lebih lambat daripada erb sebagai penipu.
bkunzi01
ya. tentunya. Saya telah menambahkan yang satu itu
engineerDave
1
Jika Anda menyukai HAML dan mengkhawatirkan performa, coba Hamlit. Saya telah melihat peningkatan besar pada kecepatan render di aplikasi saya hampir secepat ERB. github.com/k0kubun/hamlit
Jorge Najera T
21

Pertanyaannya bagi saya adalah, apakah Anda lebih suka meletakkan %sebelum setiap tag atau |sebelum setiap blok teks baru?

Ramping:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

Satu hal lagi yang harus diperhatikan: haml mengasumsikan spasi kosong di antara baris baru ( hapus spasi kosong di haml ) sementara slim mengasumsikan tidak ada spasi (Tambahkan spasi kosong di Slim di sini dan di sini )

montrealmike
sumber
9
+1. Tapi pipa tidak diperlukan untuk teks di baris yang sama dengan tag. Ini hanya diperlukan jika baris pertama teks di dalam tag tidak berada di baris yang sama dengan tag. Setiap baris setelah baris pertama tidak membutuhkan pipa, karena lekukan.
Kelvin
Saya sebenarnya suka aspek slim ini, karena membuat saya lebih sulit untuk menulis string non-internasionalisasi.
KonstantinK
pasti |untuk setiap blok teks di atas %untuk setiap tag. Ada lebih banyak tag daripada blok teks literal. Kemenangan kecil, tapi semantik bagi saya dengan slim adalah bahwa setiap html literal mentah dengan <>tag yang digunakan didahului dengan eksplisit |. Saya lebih suka "semuanya ramping kecuali Anda secara eksplisit membuatnya literal dengan |" di atas "semuanya literal sampai Anda membuatnya haml dengan %.
ahnbizcad
Saya pikir Slim lebih mirip HTML ( attr="value"), sedangkan Haml lebih mirip Ruby ( {key: "value"}seperti Hash).
Franklin Yu
16

https://github.com/scalp42/hamlerbslim - adalah tolok ukur independen yang menunjukkan Slim dan Erb sebagai pemenang, dari segi performa (ramping cenderung juga mengurangi ukuran keluaran HTML.)

Pendapat pribadi saya adalah bahwa secara keseluruhan, Slim dan Haml akan menghemat waktu Anda (== uang) dalam hal pemeliharaan, asalkan Anda memiliki orang-orang yang paham Haml / Slim yang menjaga pandangan Anda.

Jika Anda tidak memiliki orang-orang itu, Erb jelas merupakan cara yang tepat, karena terlepas dari keinginan terbaik di dunia, ada banyak orang yang sangat murah tersedia yang dapat bekerja dengan HTML / Erb, tetapi menganggap Haml / Slim lengkap Misteri.

Yang terbaik dari semua kasus, latih orang-orang ini untuk menggunakan Slim atau setidaknya biarkan mereka terpapar, dan pertahankan jumlah orang yang "mengerti".

ocodo
sumber