2012-01-13 27 views
18

Có sự khác biệt về tốc độ/hiệu quả giữa hai dòng sau không.Hiệu suất khác nhau giữa việc sử dụng bộ chọn ": không" và ".not()"?

$("table td:not(:first-child)") 

$("table td").not(":first-child") 

tôi sẽ nghĩ rằng người đầu tiên sẽ tốt hơn vì nó là loại bỏ các đối tượng, nhưng là có một sự khác biệt thực tế và nó là đáng kể.

Cảm ơn

+0

Bạn đã thử đo chưa? –

+7

http://jsperf.com/jquery-css3-not-vs-not –

+0

Đó có thể là câu hỏi của tôi hơn Tôi không thực sự chắc chắn làm thế nào để đo chính xác nó. Tôi cho rằng một trang nhỏ hơn sẽ không có vấn đề gì nhưng tại thời điểm nào nó lại tạo ra một differnce? – kwelch

Trả lời

24

Như bạn có thể thấy từ bài kiểm tra jsperf, :not trung bình nhanh gấp hai lần. Nhìn chung, mặc dù hiệu suất này có thể sẽ là một phần rất nhỏ trong thời gian thực hiện tổng thể của bạn.

Tình trạng jquery tài liệu:

Phương pháp .not() sẽ kết thúc cung cấp cho bạn các lựa chọn dễ đọc hơn so với đẩy selectors phức tạp hoặc biến thành một: không() lọc selector. Trong hầu hết các trường hợp, nó là một lựa chọn tốt hơn.

Vì vậy, thực sự tùy thuộc vào bạn để quyết định xem các phân số của giây bạn nhận được có lớn hơn khả năng đọc hay không.

+0

Tôi ước tôi có thể chọn cả hai câu trả lời vì cả hai bạn đã trả lời câu hỏi đúng cho các lý do khác nhau. – kwelch

+0

+1 cho điều này vì nó giúp tôi hiểu được đồ thị trên jsperf. Tôi đã đọc nó ngược thời gian này. – Richard

+1

Ngoài ra, khả năng đọc cũng hơi cá nhân. Tôi không thực sự có một vấn đề với khả năng đọc của: không. Đặc biệt là so với những thứ khác tôi thấy các lập trình viên làm điều đó ít dễ đọc hơn. – rooby

13

Phụ thuộc vào trình duyệt.

trình duyệt có hỗ trợ querySelectorAll sẽ có được một tăng hiệu suất với ...

$("table td:not(:first-child)") 

... bởi vì nó là một chọn hợp lệ. Các trình duyệt cũ hơn (IE7 trở xuống) sẽ không.

Bạn cần phải cẩn thận với bộ chọn :not(). jQuery (Sizzle) mở rộng nó với bộ chọn không chuẩn, vì vậy thật dễ dàng để phá vỡ qSA.

Các vấn đề liên quan