2012-07-09 12 views
92

Tôi đang học Rails và tôi đã thấy các công cụ tạo mẫu này. Tôi không có kinh nghiệm với họ (chỉ erb).erb, haml hoặc slim: bạn gợi ý cái nào? Và tại sao?

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

EDIT: 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ề họ, cú pháp của họ, tốc độ thực thi, v.v.

+5

Câu trả lời ngắn gọn là người mới bắt đầu sử dụng ERB. –

+0

http://sephinrothcn.wordpress.com/2014/04/14/slim-vs-haml-performance-perspective/ – Virtual

+0

Mặc dù không phải là công cụ tạo mẫu, bạn có thể muốn xem [dom gem] (https: // rubygems.org/gems/dom) mà tôi đã phát triển. Nó cho phép bạn dường như không thể viết mã HTML như Ruby. – sawa

Trả lời

62

ERB là tốt chủ yếu nếu bạn có một nhà thiết kế web sẽ làm việc trên HTML thuần túy và không biết hoặc là haml hoặc mỏng. Bằng cách này, anh ta 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ả hai HTML và logic ruby, hoặc nhà thiết kế của bạn đã sẵn sàng để tìm hiểu một cái gì đó mới (như HAML) tôi muốn đi cho HAML. Nó là rất nhiều ruby ​​thân thiện, làm giảm số lượng char nhiều và dễ đọc hơn nhiều so với ERB.

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

Trong ERB xem của bạn sẽ trông như thế này:

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

Trong thời gian ở HAML nó sẽ giố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 

Một sạch 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 đề về hương vị - hãy nhìn vào cả hai cú pháp và quyết định 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 người đó (HAML/SLIM).

+0

Đọc chỉnh sửa. –

+0

Đọc nó - câu cuối cùng về người chiến thắng dứt khoát là về HAML và SLIM (đã chỉnh sửa đúng cách). –

+1

Yep, 1 cho điều này, mặc dù Haml & Slim rút tất cả các mẩu tin khỏi HTML và muốn có một cụm từ tốt hơn, hoàn toàn kỳ lạ, nhiều người chỉ HTML không thể có được đầu của họ xung quanh nó (hoặc không phải là những người làm thủ công ở nơi đầu tiên, hay dựa vào các đoạn trích và sao chép-pasta.) – ocodo

32

Off đỉnh đầu của tôi đây là những gì tôi đã đưa ra

ERB:

Ưu

  • mặc định ra khỏi hộp
  • gian không trắng phụ thuộc
  • rào cản nhập cảnh thấp nhất (nếu đến từ HTML) làm HTML với mã Ruby rắc trong
  • nhất lexers IDE đọc nó theo mặc định
  • DHH thích nó
  • ứng dụng di sản có lẽ vẫn còn sử dụng nó

Nhược điểm

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

HAML

Ưu

  • ngắn gọn hơn. không có thẻ đóng cửa, phù hợp trong màn hình nhỏ hơn
  • trực quan cấu trúc bụi
  • đã xây dựng trong những người giúp đỡ (haml_concat, haml_capture) để sử dụng Haml trong các phương pháp helper
  • lớp chaining
  • nhiều đường cú pháp hữu ích như # cho divs hoặc . cho chaining lớp, hoặc: javascript cho thẻ JS

Nhược điểm

  • khoảng trắng phụ thuộc mà làm cho một số lỗi khó để tìm ra vào những thời điểm thẻ
  • phức tạp thường cần phải nghỉ mát để "băm " định dạng. (Mặc dù tôi thực sự nghĩ đây là một ví dụ tuyệt vời về tính linh hoạt đối với ai đó 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ó thể là một đoạn để đặt nó làm con). đ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ụ: các tab và dấu cách cho thụt đầu dòng, có thể khiến các trang bị lỗi trong quá trình sản xuất mà thông số/thử nghiệm thông thường sẽ không bắt được. Đạo đức: Mong đợi nhu cầu lớn hơn cho các bài kiểm tra xem và có thể không sử dụng haml cho các quan điểm nhiệm vụ quan trọng, trừ khi bạn chắc chắn rằng các bài kiểm tra của bạn đang kiểm tra việc dựng hình thực tế của khung nhìn.
  • là chậm hơn (hơn ERB)
    • caveat: này là mã ruby ​​chúng ta đang nói về nếu tốc độ là một vấn đề ngăn chặn trong ứng dụng của bạn có những lựa chọn thay thế cho ruby, ví dụ Haskell
+0

Tôi muốn thêm rằng Haml là hiệu suất chậm hơn khôn ngoan hơn erb như một con. – bkunzi01

+0

yup. chắc chắn. Tôi đã thêm một số – engineerDave

78

Hai lợi thế lớn của việc sử dụng mỏng hơn Haml:

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

  2. Slim hỗ trợ phát 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 ở mọi nơi, nhưng ngoại trừ [trang GitHub của Slim] (https://github.com/stonean/slim) Tôi không tìm thấy nhiều thông tin có thể chứng minh được về nó. –

+4

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

+5

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

13

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

Ý kiến ​​cá nhân của tôi là tổng thể, Slim và Haml sẽ giúp bạn tiết kiệm thời gian (== tiền) về bảo trì, cung cấp cho bạn những người hiểu biết Haml/Slim chăm sóc 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ì bất chấp ý chí tốt nhất trên thế giới, có rất nhiều người rất rẻ tiền có thể làm việc với HTML/Erb, nhưng tìm Haml/Slim một bí ẩn hoàn toàn.

Tốt nhất trong tất cả các trường hợp, đào tạo những người này để sử dụng Slim hoặc ít nhất là phơi bày chúng với nó và giữ số của những người "nhận được nó".

17

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

Slim:

tag(attr= "value") 
    | text 

Haml:

%tag{attr: "value"} 
    text 

Một điều nữa để Lookout cho: Haml giả định một khoảng trắng giữa các dòng mới (remove whitespace in haml) trong khi mỏng không chịu bất cứ không gian (Thêm khoảng trắng trong Slim herehere)

+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 đầu tiên của văn bản bên trong một thẻ không nằm trên cùng một dòng với thẻ. Mỗi dòng sau khi đầu tiên không cần đường ống, vì thụt đầu dòng. – Kelvin

+0

Tôi thực sự thích khía cạnh này của mỏng, vì nó làm cho nó thêm khó khăn cho tôi để viết các chuỗi không quốc tế. – KonstantinK

+0

chắc chắn '|' cho mỗi khối văn bản trên '%' cho mỗi thẻ. Có nhiều thẻ hơn so với các khối văn bản. Một chiến thắng nhỏ, nhưng ngữ nghĩa đối với tôi với mảnh mai là bất kỳ html chữ nguyên nào với các thẻ '<>' được sử dụng trước bởi một '|' 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ó chữ với' | '" trên "tất cả mọi thứ là chữ cho đến khi bạn làm cho nó haml với một'% '. – ahnbizcad