erb, haml หรือ slim: อันไหนที่คุณแนะนำ? และทำไม? [ปิด]


103

ฉันกำลังเรียนรู้ Rails และฉันได้เห็นเครื่องมือเทมเพลตเหล่านี้ ฉันไม่มีประสบการณ์กับพวกเขา (เฉพาะ erb)

แต่ในฐานะที่ฉันเป็นมือใหม่ฉันเลยสับสนจริงๆ คุณแนะนำข้อใดและเพราะเหตุใด Erb, Haml หรือ Slim? โปรดบอกเหตุผลของคุณที่ชอบมากกว่าคนอื่น และหากคุณมีคำแนะนำอื่น ๆ โปรดแจ้งให้เราทราบ

แก้ไข: ฉันไม่ได้มองหาผู้ชนะที่นี่ ฉันแค่อยากฟังความคิดเห็นของคุณเกี่ยวกับพวกเขาไวยากรณ์ความเร็วในการดำเนินการและอื่น ๆ


7
คำตอบสั้น ๆ คือในฐานะผู้เริ่มต้นใช้ ERB
Scott Schulthess


แม้ว่าจะไม่ใช่เครื่องมือแม่แบบ แต่คุณอาจต้องการดูอัญมณีโดมที่ฉันพัฒนาขึ้น ช่วยให้คุณสามารถเขียนโค้ด HTML เป็น Ruby ได้
sawa

15
คำถามที่ "ไม่สร้างสรรค์" นี้มีประโยชน์อย่างเหลือเชื่อสำหรับฉัน ขอบคุณที่ถามแม้ว่า mods ไม่ว่าจะด้วยเหตุผลใดก็ตาม เป็นหนึ่งในยอดนิยมของ Google และคำตอบมากมายที่นี่ช่วยให้ฉันตัดสินใจได้
Andy Baird

2
มันยังคงเป็นผลการค้นหาอันดับ 1 ของ Google สำหรับ 'rail 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 เพียงอย่างเดียวไม่สามารถเข้าใจได้ (หรือ aren 't handcoders ในตอนแรกหรือพึ่งพาตัวอย่างและสำเนาพาสต้า)
ocodo

8
@ErezRabih จริงๆแล้วมีความแตกต่างที่สำคัญระหว่าง HAML และ SLIM Slim เร็วกว่า HAML มาก นอกจากนี้ยังมีไวยากรณ์ทำความสะอาดและช่วยให้คุณสามารถเขียน HTML a href="foo"คุณลักษณะเพิ่มเติมหมดจด:
Mohamad

87

ข้อดีสองประการของการใช้ Slim over haml:

  1. ปัจจุบัน Slim เร็วกว่า haml ประมาณแปดเท่า

  2. Slim รองรับการสตรีม HTTP ในขณะที่ HAML ไม่รองรับ

  3. Slim มีไวยากรณ์ที่เป็นธรรมชาติมากขึ้น: a href="foo.html"


3
คุณมีแหล่งข้อมูลที่เชื่อถือได้สำหรับคำชี้แจงของคุณเกี่ยวกับความเร็วของ Slim vs Haml หรือไม่? ฉันอ่านมากเกี่ยวกับเรื่องนี้ทุกที่ แต่ยกเว้นในหน้า GitHub ของ Slimฉันไม่พบข้อมูลที่พิสูจน์ได้มากนัก
Joshua Muheim

4
@JoshuaMuheim Slim มาพร้อมกับรหัสมาตรฐานที่คุณสามารถปรับเปลี่ยน / ทดสอบบนเครื่องของคุณเอง: github.com/stonean/slim#testing
Gerry

5
+1 Slim รองรับการสตรีม HTTP เรากำลังประสบปัญหากับเกตเวย์การชำระเงินและ Heroku ดูเหมือนว่าการสตรีม HTTP เป็นวิธีแก้ปัญหานี้ แต่เนื่องจากแอปพลิเคชันของเราทำงานด้วย HAML โซลูชันนี้จึงไม่ใช่ตัวเลือกอีกต่อไป
Flov

1
@DamianNowak ฉันคิดว่าคำพูดของคุณเป็นเรื่องทั่วไป คุณอาจหมายถึงความเร็วไม่จำเป็นต้องเป็นปัจจัยในการตัดสินใจเนื่องจากปัจจัยอื่น ๆ นอกจากนี้จะเกิดอะไรขึ้นถ้าห้องสมุดช้าจนกลายเป็นคอขวด? ฉันแน่ใจว่า devs จะสังเกตเห็นแล้ว Devs ไม่ต้องให้บางน้ำหนักความเร็วหรือพวกเขาจะไม่เป็นสมาร์ทมากใช่มั้ย?
Kelvin

16
การเพิ่มประสิทธิภาพก่อนวัยอันควรไม่ใช่ความคิดที่ดีหากต้องใช้งานเพิ่มเติมจำนวนมาก แต่เพียงแค่เลือกไลบรารีที่คล้ายกันมากกว่าไลบรารีอื่นเนื่องจากประโยชน์ด้านประสิทธิภาพที่สำคัญไม่ได้เกิดขึ้นก่อนเวลาอันควร
Jamon Holmgren

35

ด้านบนของหัวของฉันนี่คือสิ่งที่ฉันคิดขึ้นมา

ERB :

ข้อดี

  • ค่าเริ่มต้นนอกกรอบ
  • ไม่ขึ้นกับพื้นที่สีขาว
  • อุปสรรคต่ำสุดของการเข้า (ถ้ามาจาก HTML) เป็น HTML ที่มีโค้ด Ruby โรยมา
  • lexers ของ IDE ส่วนใหญ่อ่านโดยค่าเริ่มต้น
  • DHH ชอบมัน
  • แอปเดิมอาจยังคงใช้งานอยู่

จุดด้อย

  • verbose เพิ่มเติม
  • แท็ก content_for ในตัวช่วยและมุมมองสามารถออกจากมือได้อย่างรวดเร็ว
  • แท็ก content_for ทำให้แท็กที่ซ้อนกันยากขึ้นเนื่องจาก erb จะส่งกลับบรรทัดสุดท้ายในบล็อกเท่านั้น ดังนั้นคุณต้องต่อท้ายสตริงแล้วส่งกลับ

แฮมล

ข้อดี

  • กระชับมากขึ้น ไม่มีแท็กปิดเหมาะกับหน้าจอขนาดเล็ก
  • โครงสร้างที่สะอาดตา
  • ได้สร้างตัวช่วย (haml_concat, haml_capture) เพื่อใช้ haml ในวิธีการช่วยเหลือ
  • การผูกคลาส
  • น้ำตาลที่มีประโยชน์มากมายเช่น # สำหรับ divs หรือ สำหรับการต่อคลาสหรือ: javascript สำหรับแท็ก JS

จุดด้อย

  • ช่องว่างขึ้นอยู่กับซึ่งทำให้เกิดข้อผิดพลาดอย่างหนักในบางครั้ง
  • แท็กที่ซับซ้อนมักจะต้องใช้รูปแบบ "แฮช" (แม้ว่าจริงๆแล้วฉันคิดว่านี่เป็นตัวอย่างที่ดีของความยืดหยุ่นสำหรับใครบางคนที่เริ่มต้นมันอาจเป็นความเจ็บปวด)
  • เพิ่มเป็นอัญมณี (อีกครั้งอาจเป็นการยืดที่จะทำให้สิ่งนี้เป็นข้อเสีย)
  • นักออกแบบอาจมีปัญหาในการปรับตัว
  • นอกเหนือจากคำเตือนการเว้นวรรคทั่วไป ... ข้อผิดพลาดเกี่ยวกับช่องว่างง่ายๆเช่น แท็บและช่องว่างสำหรับการเยื้องอาจทำให้เพจผิดพลาดในการผลิตซึ่งข้อมูลจำเพาะ / การทดสอบปกติไม่สามารถตรวจจับได้ คุณธรรม: คาดว่าจะมีความจำเป็นมากขึ้นสำหรับการทดสอบมุมมองและอาจไม่ใช้ haml สำหรับมุมมองที่สำคัญของภารกิจเว้นแต่คุณจะแน่ใจว่าการทดสอบของคุณกำลังทดสอบการแสดงผลจริงของมุมมอง
  • ช้ากว่า (กว่า erb)
    • ข้อแม้:นี่คือรหัสทับทิมที่เรากำลังพูดถึงหากความเร็วเป็นปัญหาในการบล็อกในแอปพลิเคชันของคุณมีทางเลือกอื่นแทนทับทิมเช่น haskell

ฉันจะเพิ่มว่า Haml ทำงานช้ากว่าที่ฉลาดกว่า erb เป็น con
bkunzi01

ได้. แน่นอน. ฉันได้เพิ่มไปแล้ว
engineerDave

1
ถ้าคุณชอบ HAML และกังวลเรื่องประสิทธิภาพลองใช้ Hamlit ฉันได้เห็นการปรับปรุงความเร็วในการเรนเดอร์บนแอปของฉันเร็วขึ้นเกือบเท่า ERB github.com/k0kubun/hamlit
Jorge Najera T

21

คำถามสำหรับฉันคือคุณควรใส่ไว้%ก่อนทุกแท็กหรือ|ก่อนบล็อกข้อความใหม่ทุกครั้ง

บาง:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

อีกสิ่งหนึ่งที่ควรระวัง: haml ถือว่าช่องว่างระหว่างบรรทัดใหม่ ( ลบช่องว่างใน haml ) ในขณะที่ slim ถือว่าไม่มีช่องว่าง (เพิ่มช่องว่างใน Slim ที่นี่และที่นี่ )


9
+1. แต่ไม่จำเป็นต้องใช้ไปป์สำหรับข้อความในบรรทัดเดียวกับแท็ก จำเป็นก็ต่อเมื่อข้อความบรรทัดแรกในแท็กไม่อยู่ในบรรทัดเดียวกับแท็ก ทุกบรรทัดหลังจากแรกไม่ต้องการท่อเนื่องจากการเยื้อง
Kelvin

จริงๆแล้วฉันชอบลักษณะที่บางเฉียบนี้เพราะมันทำให้ยากมากสำหรับฉันที่จะเขียนสตริงที่ไม่เป็นสากล
KonstantinK

แน่นอน|สำหรับแต่ละบล็อกของข้อความ%สำหรับทุกแท็ก มีแท็กมากกว่าบล็อกข้อความตามตัวอักษร ขนาดเล็ก แต่ความหมาย win สำหรับฉันกับเพรียวบางที่ใด html ที่แท้จริงดิบกับแท็กที่ใช้นำโดยชัดเจน<> |ผมชอบทุกอย่าง "เป็นบางเว้นแต่ว่าคุณได้ให้มันกับตัวอักษร|" มากกว่า "ทุกอย่างเป็นตัวอักษรจนกว่าคุณจะทำให้มัน Haml ด้วย%.
ahnbizcad

ฉันคิดว่า Slim ดูเหมือน HTML ( attr="value") มากกว่าในขณะที่ Haml ดูเหมือน Ruby ( {key: "value"}เช่น Hash) มากกว่า
Franklin Yu

16

https://github.com/scalp42/hamlerbslim - เป็นเกณฑ์มาตรฐานอิสระซึ่งแสดงให้ Slim และ Erb เป็นผู้ชนะประสิทธิภาพที่ชาญฉลาด (บางมีแนวโน้มที่จะลดขนาดเอาต์พุต HTML ด้วย)

ความคิดเห็นส่วนตัวของฉันคือโดยรวมแล้ว Slim และ Haml จะช่วยคุณประหยัดเวลา (== เงิน) ในแง่ของการบำรุงรักษาโดยให้คุณมีคนที่เข้าใจ Haml / Slim คอยดูแลมุมมองของคุณ

หากคุณไม่มีคนเหล่านั้น Erb เป็นหนทางที่จะไปได้อย่างแน่นอนเพราะแม้จะมีความตั้งใจที่ดีที่สุดในโลก แต่ก็มีคนราคาไม่แพงจำนวนมากที่สามารถทำงานกับ HTML / Erb ได้ แต่หา Haml / Slim ที่สมบูรณ์ ความลึกลับ

ที่ดีที่สุดคือฝึกคนเหล่านี้ให้ใช้ Slim หรืออย่างน้อยก็เปิดเผยให้พวกเขาเห็นและรักษาจำนวนคนที่ "ได้รับ" ไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.