erb, haml hay slim: bạn đề xuất cái nào? Và tại sao? [đóng cửa]


103

Tôi đang học Rails và tôi đã thấy các công cụ mẫu này. Tôi không có kinh nghiệm với họ (chỉ erb).

Nhưng là một người mới bắt đầu, tôi thực sự bối rối. Bạn đề xuất cái nào và tại sao? Erb, Haml hay Slim? Vui lòng cho biết lý do của bạn để thích một cái hơn những cái khác. Và nếu bạn có bất kỳ khuyến nghị nào khác, vui lòng cho chúng tôi biết.

CHỈNH SỬA: Tôi KHÔNG tìm kiếm người chiến thắng ở đây. Tôi chỉ muốn nghe ý kiến ​​của bạn về chúng, cú pháp của chúng, tốc độ thực thi, v.v.


7
Câu trả lời ngắn gọn là, khi mới bắt đầu, hãy sử dụng ERB.
Scott Schulthess


Mặc dù không phải là một công cụ mẫu, bạn có thể muốn xem xét đá quý dom mà tôi đã phát triển. Nó cho phép bạn viết mã HTML như Ruby.
sawa

15
Câu hỏi "không mang tính xây dựng" này vô cùng hữu ích đối với tôi. Cảm ơn bạn đã hỏi nó, ngay cả khi mod vì bất cứ lý do gì không cảm thấy nó phù hợp. Đó là một trong những lượt truy cập hàng đầu của google và nhiều câu trả lời ở đây đã giúp tôi đưa ra quyết định của mình.
Andy Baird

2
nó vẫn là kết quả số 1 trên google cho 'rails html erb'
Orwellophile

Câu trả lời:


67

ERB chủ yếu tốt nếu bạn có một nhà thiết kế web làm việc trên HTML thuần túy và không biết haml hay slim. Bằng cách này, anh ấy có thể viết HTML và bạn có thể nhúng logic ruby ​​với các thẻ thích hợp.

Nếu bạn làm việc trên cả HTML và logic ruby, hoặc nhà thiết kế của bạn đã sẵn sàng học một cái gì đó mới (như HAML), tôi sẽ chọn HAML. Nó thân thiện với ruby ​​hơn rất nhiều, giảm số lượng char nhiều và dễ đọc hơn ERB rất nhiều.

Ví dụ (lấy từ trang HAML chính thức ):

Trong ERB, chế độ xem của bạn sẽ giống như sau:

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

Khi ở trong HAML, nó sẽ trông như thế này:

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

Sạch sẽ hơn rất nhiều!

Đối với sự khác biệt giữa HAML và SLIM - tôi chưa bao giờ thực sự làm việc với SLIM nhưng tôi đoán đó là vấn đề sở thích - hãy xem xét cả hai cú pháp và quyết định cái nào trông đẹp hơn trong mắt bạn. Tôi không nghĩ rằng có một người chiến thắng nhất định giữa hai cái đó (HAML / SLIM).


Hãy đọc nó - câu cuối cùng về người chiến thắng cuối cùng là về HAML và SLIM (đã được chỉnh sửa đúng cách).
Erez Rabih,

1
Đúng, +1 cho điều này, mặc dù Haml & Slim lấy ra tất cả những thứ rác rưởi khỏi HTML và muốn có một cụm từ tốt hơn, hoàn toàn tuyệt vời, nhưng nhiều người chỉ sử dụng HTML đơn giản là không thể hiểu được nó (hoặc không 'handcoders t ở nơi đầu tiên, hoặc dựa vào các đoạn và sao chép-pasta).
ocodo

8
@ErezRabih thực sự có sự khác biệt lớn giữa HAML và SLIM. Slim nhanh hơn nhiều so với HAML. Nó cũng có một cú pháp sạch hơn, và cho phép bạn viết HTML thuộc tính sạch hơn: a href="foo".
Mohamad

87

Hai lợi thế lớn của việc sử dụng slim over haml:

  1. Slim hiện nhanh hơn khoảng tám lần so với haml.

  2. Slim hỗ trợ truyền trực tuyến HTTP, trong khi HAML thì không.

  3. Slim có một cú pháp tự nhiên hơn: a href="foo.html"


3
Bạn có nguồn đáng tin cậy cho tuyên bố của mình về tốc độ của Slim vs Haml không? Tôi đã đọc rất nhiều về điều này ở khắp mọi nơi, nhưng ngoại trừ trên trang GitHub của Slim, tôi không tìm thấy nhiều thông tin có thể chứng minh về nó.
Joshua Muheim

4
@JoshuaMuheim Slim đi kèm với mã điểm chuẩn mà bạn có thể sửa đổi / kiểm tra trên máy của riêng mình: github.com/stonean/slim#testing
Gerry

5
1 Slim hỗ trợ HTTP streaming, chúng tôi đang gặp vấn đề với thanh toán của chúng tôi Gateway và Heroku, có vẻ như luồng HTTP là một cách để giải quyết vấn đề này nhưng khi ứng dụng chạy của chúng tôi với HAML giải pháp này không phải là một lựa chọn nữa
Flov

1
@DamianNowak Tôi nghĩ rằng tuyên bố của bạn quá khái quát. Có lẽ ý bạn là tốc độ không nhất thiết phải là yếu tố quyết định, nếu xét đến các yếu tố khác. Ngoài ra, điều gì sẽ xảy ra nếu một thư viện đủ chậm để trở thành một nút cổ chai? Tôi chắc rằng các nhà phát triển sẽ chú ý khi đó. Các nhà phát triển phải đặt một số trọng lượng cho tốc độ, nếu không họ sẽ không thông minh lắm, hả?
Kelvin

16
Tối ưu hóa sớm không phải là một ý tưởng hay nếu nó đòi hỏi nhiều công việc bổ sung, nhưng chỉ cần chọn một thư viện tương tự thay vì một thư viện khác vì lợi ích hiệu suất đáng kể không phải là quá sớm.
Jamon Holmgren

35

Ngoài ra, đây là điều tôi nghĩ ra

ERB :

Ưu điểm

  • mặc định ra khỏi hộp
  • không phụ thuộc khoảng trắng
  • rào cản xâm nhập thấp nhất (nếu đến từ HTML) vì HTML của nó với mã Ruby được rắc vào
  • hầu hết các lexers của IDE đọc nó theo mặc định
  • DHH thích nó
  • các ứng dụng cũ có thể vẫn đang sử dụng nó

Nhược điểm

  • dài dòng hơn
  • thẻ content_for trong trình trợ giúp và chế độ xem có thể nhanh chóng thoát khỏi tầm tay
  • Các thẻ content_for làm cho việc lồng các thẻ khó hơn vì erb chỉ trả về dòng cuối cùng trong khối. vì vậy bạn phải nối vào một chuỗi và sau đó trả về chuỗi đó.

HAML

Ưu điểm

  • ngắn gọn hơn. không có thẻ đóng, vừa với màn hình nhỏ hơn
  • cấu trúc trực quan sạch hơn
  • đã tích hợp sẵn trình trợ giúp (haml_concat, haml_capture) để sử dụng haml trong các phương thức trợ giúp
  • chuỗi lớp
  • rất nhiều đường cú pháp hữu ích như # cho div hoặc. cho chuỗi lớp, hoặc: javascript cho thẻ JS

Nhược điểm

  • phụ thuộc khoảng trắng khiến đôi khi có một số lỗi khó tìm ra
  • các thẻ phức tạp thường cần dùng đến định dạng "băm". (Mặc dù tôi thực sự nghĩ rằng đây là một ví dụ tuyệt vời về sự linh hoạt đối với một người mới bắt đầu, nó có thể là một nỗi đau.)
  • được thêm vào như một viên ngọc (một lần nữa có lẽ là một đoạn dài để đặt điều này như một trò lừa đảo)
  • các nhà thiết kế có thể gặp một số khó khăn khi điều chỉnh
  • ngoài cảnh báo khoảng trắng chung ... các lỗi khoảng trắng đơn giản, ví dụ. tab và khoảng trắng để thụt lề, có thể khiến các trang bị lỗi trong quá trình sản xuất mà thông số kỹ thuật / kiểm tra thông thường sẽ không bắt được. Đạo đức: Mong đợi nhu cầu lớn hơn đối với các bài kiểm tra chế độ xem và có thể không sử dụng haml cho các chế độ xem quan trọng của sứ mệnh, trừ khi bạn chắc chắn rằng các bài kiểm tra của mình đang kiểm tra kết xuất thực tế của chế độ xem.
  • chậm hơn (hơn erb)
    • cảnh báo: đây là mã ruby ​​mà chúng ta đang nói đến nếu tốc độ là một vấn đề chặn trong ứng dụng của bạn, có các lựa chọn thay thế cho ruby, ví dụ: haskell

Tôi muốn nói thêm rằng Haml có hiệu suất chậm hơn khôn ngoan hơn là một kẻ lừa đảo.
bkunzi01 28/09/16

vâng. chắc chắn. Tôi đã thêm cái đó
kỹ sư Lưu

1
Nếu bạn thích HAML và lo lắng về hiệu suất, hãy thử Hamlit. Tôi đã thấy một sự cải thiện lớn về tốc độ hiển thị trên các ứng dụng của mình gần như nhanh như ERB. github.com/k0kubun/hamlit
Jorge Najera T

21

Câu hỏi đặt ra cho tôi là bạn muốn đặt %trước mỗi thẻ hay |trước mỗi khối văn bản mới?

Mảnh khảnh:

 tag(attr= "value")
  | text

Haml:

 %tag{attr: "value"}
   text

Một điều nữa cần chú ý: haml giả định khoảng trắng giữa các dòng mới ( xóa khoảng trắng trong haml ) trong khi slim giả định không có khoảng trắng (Thêm khoảng trắng trong Slim tại đâytại đây )


9
+1. Nhưng đường ống không cần thiết cho văn bản trên cùng một dòng với thẻ. Nó chỉ cần thiết nếu dòng văn bản đầu tiên bên trong thẻ không cùng dòng với thẻ. Mọi dòng sau dòng đầu tiên không cần đường ống, vì có thụt lề.
Kelvin

Tôi thực sự thích khía cạnh này của slim, vì nó khiến tôi gặp khó khăn hơn khi viết các chuỗi không được quốc tế hóa.
KonstantinK

chắc chắn |cho mỗi khối văn bản %cho mỗi thẻ. Có nhiều thẻ hơn là các khối văn bản theo nghĩa đen. Một chiến thắng nhỏ, nhưng về mặt ngữ nghĩa đối với tôi với slim là bất kỳ html chữ thô nào có <>các thẻ được sử dụng đều được đặt trước bằng một câu lệnh rõ ràng |. Tôi thích "tất cả mọi thứ là mỏng, trừ khi bạn rõ ràng làm cho nó đen với |" qua "tất cả mọi thứ là chữ cho đến khi bạn thực hiện nó Haml với một %.
ahnbizcad

Tôi nghĩ Slim trông giống HTML ( attr="value") hơn, trong khi Haml trông giống Ruby hơn ( {key: "value"}như Hash).
Franklin Yu

16

https://github.com/scalp42/hamlerbslim - là một điểm chuẩn độc lập cho thấy Slim và Erb là những người chiến thắng, hiệu suất khôn ngoan (mỏng cũng có xu hướng giảm kích thước đầu ra HTML.)

Ý kiến ​​cá nhân của tôi là về tổng thể, Slim và Haml sẽ giúp bạn tiết kiệm thời gian (== tiền bạc) về mặt bảo trì, miễn là bạn có những người hiểu biết về Haml / Slim theo dõi quan điểm của bạn.

Nếu bạn không có những người đó, Erb chắc chắn là con đường để đi, bởi vì mặc dù có ý chí tốt nhất trên thế giới, có rất nhiều người rất rẻ có thể làm việc với HTML / Erb, nhưng Haml / Slim hoàn toàn có thể. huyền bí.

Tốt nhất trong tất cả các trường hợp, hãy huấn luyện những người này sử dụng Slim hoặc ít nhất là cho họ tiếp xúc với nó, và giữ lại số lượng của những người "nhận được nó".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.