ข้อดีข้อเสียของทั้ง Jade และ EJS สำหรับเทมเพลต Node.js คืออะไร [ปิด]


118

Jade กับ EJS ข้อดีข้อเสียของแต่ละข้อคืออะไรและแต่ละจุดออกแบบมาเพื่ออะไร

มีเอ็นจิ้นเทมเพลตที่เข้ากันได้กับ Express อื่น ๆที่ดีหรือไม่และเพราะเหตุใด

คำตอบ:


179

ฉันใช้หยกมาก่อน ข้อดีของ Jade คือคุณมีไวยากรณ์ที่สั้นลงซึ่งหมายความว่าคุณสามารถพิมพ์ได้เร็วขึ้น blockในหยกที่มีประสิทธิภาพสวยซึ่งสามารถช่วยฉันมากเมื่อต้องรับมือกับโค้ด HTML ที่ซับซ้อน

ในทางกลับกันมันยากที่จะทำสิ่งง่ายๆใน Jade เช่นการเพิ่มคลาสลงใน DIV โดยใช้เงื่อนไข if ง่ายๆ ฉันต้องใส่อะไรแบบนี้

- if (isAdmin)
  div.admin.user
- else
  div.user

Jade ยังไม่แยกความแตกต่างระหว่างแท็กและตัวแปรที่ทำให้โค้ดสับสนมาก (อย่างน้อยสำหรับฉัน)

a(href='/user/' + user.id)= user.name

Jade ยังไม่เหมาะกับนักออกแบบ เพื่อนนักออกแบบของฉันมักจะให้ HTML และ CSS แก่ฉัน (พวกเขาเปลี่ยนมาใช้ LESS เมื่อไม่นานมานี้ แต่ยังต้องการใช้ HTML) และด้วยเหตุนี้หากฉันใช้ Jade ฉันจำเป็นต้องแปลง HTML เป็น Jade นอกจากนี้ใน Jade เราจำเป็นต้องใช้การเยื้องดังนั้นหากโครงสร้าง HTML ของคุณซับซ้อนโค้ดของคุณจะดูแย่ (โดยเฉพาะตาราง) บางครั้งฉันไม่รู้ด้วยซ้ำว่าตัวเองอยู่ในระดับไหน

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

เมื่อเร็ว ๆ นี้ฉันได้เปลี่ยนไปใช้ EJS และฉันก็มีความสุขกับมัน ใกล้เคียงกับ HTML แท้มากและใช้ไวยากรณ์เดียวกันกับของเอนจินเทมเพลตฟรอนต์เอนด์ที่ฉันใช้ (เทมเพลตขีดล่าง) ฉันต้องบอกว่าทุกอย่างง่ายขึ้นด้วย EJS ฉันไม่ต้องทำการแปลงทั้งหมดเมื่อได้รับเทมเพลต HTML จากเพื่อนนักออกแบบของฉัน สิ่งที่ฉันต้องทำคือแทนที่ส่วนไดนามิกด้วยตัวแปรที่ส่งผ่านจาก ExpressJS สิ่งที่ทำให้ฉันคลั่งไคล้เมื่อใช้ Jade ได้รับการแก้ไขใน EJS

<div class="<%= isAdmin? 'admin': '' %> user"></div>

และฉันสามารถรู้ได้ว่าอะไรคืออะไรกับ EJS

<a href="/user/<%= user.id %>"><%= user.name %></a>

หากคุณพลาดไวยากรณ์สั้น ๆ ของ Jade (เช่นฉัน) คุณสามารถรวม Zen-Coding และ EJS ซึ่งจะช่วยเร่งความคืบหน้าโดยทั่วไปได้ เรื่องประสิทธิภาพไม่เห็นความแตกต่าง

อย่างไรก็ตาม EJS ไม่ได้ทรงพลังเท่า Jade แต่ก็ไม่มีบล็อกโดยค่าเริ่มต้น (ผู้ชายคนนี้ใช้คุณสมบัติบล็อกสำหรับ EJS https://github.com/RandomEtc/ejs-locals )

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

อัปเดต 16 ธันวาคม 2556: เมื่อเร็ว ๆ นี้ฉันได้เปลี่ยนจาก EJS เป็น Swig (ซึ่งมีแนวคิดคล้ายกับ Jinja2 ใน Python world) เหตุผลหลักคือการขาดบล็อกใน EJS แม้จะได้รับความช่วยเหลือจากejs-locals. Swig ยังใช้ HTML ธรรมดาสำหรับเทมเพลตและฟีเจอร์เจ๋ง ๆ มากมายที่เอ็นจินเทมเพลตควรมีเช่นตัวกรองและแท็กที่ EJS ไม่มี


1
เกี่ยวกับการไม่ทราบว่าคุณอยู่ในระดับใดควรกล่าวถึงหยกมีการสนับสนุนใหม่สำหรับแท็กหลายแท็กในบรรทัดเดียว จากเอกสารของ Jade 'เพื่อประหยัดพื้นที่ Jade จัดเตรียมไวยากรณ์แบบอินไลน์สำหรับแท็กที่ซ้อนกัน' a: img 'เทียบเท่ากับ' <a> <img /> </a> '
Verdi Erel Ergün

1
ฉันเคยลองเมื่อJadeหนึ่งหรือสองปีที่แล้ว บางทีมันอาจจะดีขึ้นในตอนนี้ อย่างไรก็ตามการจัดอันดับจุดแรกของฉันมันจะไม่ง่ายเลยที่จะไปรอบ ๆ นั้น
Tan Nguyen

1
คุณเคยเห็นhtml2jadeหรือไม่?
beatgammit

4
ฉันทำเครื่องมือนั้นให้คุณ แต่ถึงกระนั้นทุกครั้งที่นักออกแบบให้บางอย่างกับฉันฉันต้องทำการแปลง (ซึ่งน่ารำคาญ)
Tan Nguyen

1
ฉันแค่อยากจะทราบ (เกี่ยวกับจุดแรกของคุณเกี่ยวกับเงื่อนไข) ว่าคุณอาจสามารถใช้ไวยากรณ์ของ ternary สำหรับกรณีการใช้งานนี้ได้ ดูคำถามล้นสแต็กนี้: stackoverflow.com/questions/9488029/…
Rob Gibbons

43

ฉันจะไม่บอกว่าคนหนึ่งดีกว่าอีกคน พวกเขาแตกต่างกันแน่นอน แต่ "ดีกว่า" ค่อนข้างสัมพันธ์กัน

ฉันชอบ EJS เพราะฉันคิดว่า HTML ไม่ได้แย่เกินไปแถมยังช่วยให้ฉันทำงานร่วมกับคนอื่นได้โดยที่พวกเขาไม่ต้องเรียนรู้ Jade

อย่างไรก็ตาม Jade ค่อนข้างสะอาดและสร้างรหัสที่เรียบร้อยในมุมมองของคุณ

เลือกสิ่งที่คุณรู้สึกสบายใจกว่า

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