2010-06-01 32 views
34

Tôi đang cố gắng tìm một số chỉnh sửa hiệu suất phía máy khách đơn giản trong trang nhận hàng triệu lần xem trang hàng tháng. Một mối quan tâm mà tôi có là việc sử dụng bộ chọn CSS phổ quát (*).Tác động hiệu suất của bộ chọn phổ quát là gì?

Như một ví dụ, hãy xem xét một tài liệu HTML rất đơn giản như sau:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Example</title> 
    <style type="text/css"> 
     * { 
     margin: 0; 
     padding: 0; 
     } 
    </head> 
    <body> 
    <h1>This is a heading</h1> 
    <p>This is a paragraph of text.</p> 
    </body> 
</html> 

Bộ chọn chung sẽ áp dụng việc kê khai ở trên để các body, h1p yếu tố, bởi vì đó là những người duy nhất trong tài liệu.

Nói chung, tôi sẽ thấy hiệu suất tốt hơn từ một quy tắc như:

body, h1, p { 
    margin: 0; 
    padding: 0; 
} 

Hoặc này sẽ có chính xác ảnh hưởng thực giống nhau không?

Trình chọn phổ dụng có thực hiện được nhiều công việc mà tôi có thể không biết?

Tôi nhận thấy rằng tác động hiệu suất trong ví dụ này có thể rất nhỏ, nhưng tôi hy vọng tìm hiểu điều gì đó có thể dẫn đến cải thiện hiệu suất đáng kể hơn trong các tình huống thực tế.

Tôi không có ý định ghi đè các kiểu trong quy tắc chọn chung với các kiểu khác sau trong tài liệu - tức là, sử dụng kiểu đó làm biểu định kiểu đặt lại nhanh và dơ. Tôi thực sự đang cố gắng sử dụng công cụ chọn phổ quát chính xác như tôi nghĩ - để áp dụng quy tắc được đặt cho tất cả các phần tử trong tài liệu, một lần và cho tất cả.

Cuối cùng, tôi hy vọng sẽ xác định xem có điều gì đó chậm chạp về bộ chọn chung hay không, hoặc nếu nó chỉ có một đoạn rap xấu do lạm dụng tràn lan. Nếu * { margin: 0; } nghĩa đen là tương đương với body, h1, p { margin: 0; }, thì điều đó sẽ trả lời câu hỏi của tôi và tôi sẽ biết đi với câu hỏi trước vì nó ngắn gọn hơn. Nếu không, tôi muốn hiểu tại sao bộ chọn phổ hoạt động chậm hơn.

+3

Từ quan điểm hiệu suất, khi nào thì _ever_ tốt hơn để vô hiệu hóa toàn cục (hoặc bật) một đặc tính cho _everything_ chỉ để cuối cùng thiết lập lại nó? Mặc định trình duyệt mặc định sẽ không mất nhiều thời gian - bạn có thể nhận được gợi ý từ các tệp CSS "đặt lại", nhưng tôi sẽ không đi xa đến mức thực sự sử dụng nó. Các trình duyệt nguồn mở có các giá trị mặc định CSS nguồn mở mà bạn có thể xem. – reisio

+0

Tôi không chắc rằng bạn đã hiểu câu hỏi của tôi. Tôi không tìm cách thiết lập lại và sau đó áp dụng lại phong cách ở đây, nhưng thay vì áp dụng một quy tắc cho mọi phần tử trên trang. Câu hỏi của tôi là liệu về mặt kỹ thuật có giống nhau không khi sử dụng công cụ chọn chung vì nó chọn từng phần tử riêng lẻ hoặc nếu xảy ra một hình phạt hiệu suất vì bất kỳ lý do gì. – Bungle

+0

'*' không phải là nghĩa đen tương đương với 'body, h1, p' vì những lý do hiển nhiên. Lý do * duy nhất * tại sao nó thực hiện chậm hơn là vì bạn áp dụng kiểu cho mọi thứ, trong khi bất kỳ bộ chọn nào khác giới hạn bạn với một tập hợp con các phần tử cụ thể trong DOM. Nhưng câu hỏi thực sự là, có chậm hơn nhiều khi trình duyệt sẽ không phản hồi khi áp dụng quá nhiều kiểu không? Tôi rât nghi ngơ điêu đo. Xem thêm: [* {box-sizing: border-box} FTW] (http://paulirish.com/2012/box-sizing-border-box-ftw) – BoltClock

Trả lời

1

Tránh bộ chọn chung sẽ luôn tăng tốc độ hiển thị trang của bạn. Ký tự đại diện * chậm, đặc biệt khi các trang của bạn trở thành tổ phức tạp và yếu tố của bạn tăng vọt.

Bạn nên luôn chỉ định ID xuống mức thấp nhất mà bạn có thể có thể (tôi nhận ra rằng điều này trở nên gần như không thể, đặc biệt là khi xử lý những thứ như kết quả cơ sở dữ liệu). Nhưng khi bạn sử dụng selectors như

.mysuperclass ul li p a 

Bạn có một lớp kèm theo bốn selectors chung - đó có nghĩa là cho mỗi phần tử của .mysuperclass công cụ rendering có để lặp qua từng phần tử trong mẹ mà tìm kiếm những quy tắc.

Tóm lại, câu trả lời của tôi càng cụ thể càng tốt với CSS của bạn và xem chi tiết nhất có thể trong DOM bằng bộ chọn của bạn. Tránh ký tự đại diện và generics.

+0

Cảm ơn, Jarrod. Tôi nghĩ rằng tôi có thể nhấn mạnh hơn trong câu hỏi của mình rằng tôi muốn nhắm mục tiêu mọi phần tử trên trang bằng (các) quy tắc CSS của tôi - tức là bộ chọn chung, như tôi hiểu, chính xác là những gì tôi muốn trong trường hợp này. Vì tôi cũng luôn nghe bộ chọn phổ biến chậm, tôi hy vọng sẽ tìm hiểu xem sự chậm chạp đó có phải là bộ chọn hay không hoặc chỉ dựa trên cách sử dụng thông thường của nó (ví dụ: một bản định kiểu đặt lại nhanh chóng và bẩn sẽ được theo sau bằng cách tạo kiểu ghi đè). – Bungle

+0

Tôi hiểu. Tôi sẽ đề xuất thực hiện một số thử nghiệm tốc độ bằng cách sử dụng các công cụ dành cho nhà phát triển của Chrome. Thử nghiệm và xem kết quả để sử dụng bộ chọn ký tự đại diện so với định nghĩa thẻ rõ ràng. Chrome sẽ cung cấp cho bạn thông tin chi tiết về mỗi quá trình mất bao lâu. –

+12

Tôi khuyên * chống lại * là "càng cụ thể càng tốt" với bộ chọn của bạn. Trong tương lai khi bạn muốn thay đổi kiểu hoặc khi bạn có nhiều ngoại lệ hơn, bạn sẽ muốn ghi đè các bộ chọn đó, điều này càng ngày càng trở nên khó khăn hơn. Giữ độ đặc hiệu thấp và sử dụng nhiều bộ chọn phần tử và lớp học hơn. http://numiko.com/labs/2011/07/css-specificity-wars/ – chharvey

2

Tôi hiểu rằng các kí hiệu có tác động hiệu suất, nhưng trên các trang web nhỏ hơn tác động là không đáng kể. Ký tự đại diện là các công cụ rất hữu ích để xây dựng một trang web dựa trên việc nâng cao tiến bộ. Rõ ràng, sử dụng một cái gì đó như HTML *, thực sự tác động đến hiệu suất trên các trang web lớn hơn, nhưng làm cho nó cụ thể hơn, chẳng hạn như #element_id *, giúp nhanh chóng thực hiện thay đổi chung cho các phần tử con.

Ký tự đại diện có lý do. Bạn chỉ cần hiểu khi sử dụng nó sẽ có lợi hơn là không sử dụng nó. Nó phụ thuộc vào ngữ cảnh.

Tôi sử dụng ký tự đại diện và bộ chọn chung khi tạo mẫu CSS. Nó cũng là một cách tuyệt vời để nhanh chóng tinh chỉnh một loạt các yếu tố bên trong một chủ đề WordPress không quen thuộc bằng cách sử dụng các kiểu tùy chỉnh.

Ngay cả Bootstrap, phổ biến và được sắp xếp hợp lý, sử dụng ký tự đại diện trong các trường hợp phù hợp.

Tài liệu tham khảo:

  • http://getbootstrap.com/css/
  • Gustafson, A. 2015. thích ứng Thiết kế Web: Phác thảo kinh nghiệm phong phú với Progressive Enhancement. Berkeley, (CA): Những tay đua mới.
Các vấn đề liên quan