Tác giả của trang này: http://24ways.org/2011/your-jquery-now-with-less-suck xác nhận rằng bộ chọn jQuery $('#id').find('p')
nhanh hơn $('#id p')
, mặc dù điều đó có lẽ tạo ra kết quả tương tự nếu tôi hiểu chính xác. Lý do cho sự khác biệt này là gì?
Trả lời
Vì $('#id').find('p')
được tối ưu hóa để làm ...
document.getElementById('id').getElementsByTagName('p');
... trong khi tôi đoán $('#id p')
sẽ sử dụng một trong hai querySelectorAll
nếu có, hoặc động cơ chọn dựa JavaScript nếu không muốn nói.
Bạn nên lưu ý rằng hiệu suất luôn có các biến thể giữa các trình duyệt. Opera được biết là có tốc độ cực nhanh querySelectorAll
.
Ngoài ra, các phiên bản khác nhau của jQuery có thể đưa ra các tối ưu hóa khác nhau.
Có thể là $('#id p')
sẽ là (hoặc hiện tại) được tối ưu hóa giống như phiên bản đầu tiên.
Tôi giả sử rằng 'querySelectorAll ('# id p')' cũng được tối ưu hóa khá tốt. Hiệu suất khác biệt cần được kiểm tra, không được khẳng định. – Tomalak
@Tomalak: Tôi đã thực hiện đủ kiểm tra 'qSA' để biết rằng trong hầu hết các trình duyệt, nó thực sự khá chậm so với. Đây không phải là một xác nhận ngẫu nhiên. Xem cập nhật của tôi về * Opera *. –
Tôi không nói rằng qSA sẽ luôn nhanh hơn. Tôi nói * "Tôi giả sử" * để chứng minh quan điểm của tôi, thực sự. Sau khi tất cả, nó là khá khó khăn để hỗ trợ như một tuyên bố tổng quát một cách này hay cách khác, cho sự khác biệt lớn trong jQuery và các phiên bản trình duyệt. – Tomalak
Trình duyệt cụ thể kể từ khi jQuery sử dụng querySelectorAll
khi có sẵn. Khi tôi thử nghiệm trong WebKit nó đã thực sự nhanh hơn. Khi nó chỉ ra querySelectorAll
được tối ưu hóa cho trường hợp này.
Inside WebKit, nếu toàn bộ bộ chọn là #<id>
và chỉ có một phần tử trong tài liệu có id đó, nó được tối ưu hóa thành getElementById
. Tuy nhiên, nếu công cụ chọn là bất kỳ điều gì khác, hãy querySelectorAll
duyệt qua tài liệu tìm kiếm các yếu tố phù hợp.
Đúng, bạn có thể tối ưu hóa trường hợp này để chúng hoạt động giống nhau - nhưng ngay bây giờ, không ai có. Bạn có thể tìm thấy nó here trong nguồn WebKit, SelectorDataList::execute
sử dụng SelectorDataList::canUseIdLookup
để quyết định có sử dụng getElementById
hay không. Có vẻ như sau:
if (m_selectors.size() != 1)
return false;
if (m_selectors[0].selector->m_match != CSSSelector::Id)
return false;
if (!rootNode->inDocument())
return false;
if (rootNode->document()->inQuirksMode())
return false;
if (rootNode->document()->containsMultipleElementsWithId(m_selectors[0].selector->value()))
return false;
return true;
Nếu bạn đang thử nghiệm trong trình duyệt không phải là WebKit, có thể nó thiếu các tối ưu hóa tương tự.
- 1. Tại sao * p ++ khác với * p + = 1?
- 2. Bộ chọn ID jQuery ("#id") Trả về mảng
- 3. PrimeFaces/JSF ID thành phần không tìm thấy từ bên trong p: DataTable
- 4. Làm thế nào để tham chiếu p: commandLink trong p: dataTable từ p: blockUI trigger?
- 5. Tại sao trình biên dịch yêu cầu `xóa [] p` so với` xóa p [] `?
- 6. Tại sao/Khi nào sử dụng (!! p) thay vì (p! = NULL)
- 7. "p" trong Ruby là gì?
- 8. 'P 0' <'P! 'trong python và postgresql
- 9. Bộ chọn sắp xếp jQuery ("id" so với "class")?
- 10. Tại sao COM interop được ưu tiên hơn P/Gọi trong .NET?
- 11. Bộ chọn jQuery có id và dấu phẩy
- 12. Char * p và scanf
- 13. Tại sao bộ chọn jQuery này lại quá chậm?
- 14. ID bản sao jQuery sao chép
- 15. Thay vào đó int * p có nên dài * p không?
- 16. Sự khác nhau giữa int (* p) [3] và int * p [3] là gì?
- 17. p: CommandButton ajax không được gọi bên trong p: DataList
- 18. Trong jQuery, bộ chọn $ ('[id = foo]') kém hiệu quả hơn $ ('# foo')?
- 19. Xóa p trong đó p là một con trỏ tới mảng luôn luôn bị rò rỉ bộ nhớ?
- 20. Có phải "div> p" & "div p" giống nhau không?
- 21. Hiệu suất của jQuery Selectors với ID
- 22. Sau khi p = chuỗi mới [0] và p = new int [0], tại sao phiên bản chuỗi bị treo khi xóa [] p?
- 23. thường xuyên biểu hiện \ p {L} và \ p {N}
- 24. số thập phân (s, p) hoặc số (s, p)?
- 25. Có vấn đề với int * p; * p = 23;
- 26. jQuery: Làm cách nào để chọn tất cả P con của bố mẹ tôi?
- 27. jQuery có tìm kiếm ID trước khi lọc các tham số khác trong bộ chọn không?
- 28. Nhóm cụm từ thông dụng được đặt tên "(? P <group_name> regexp)": "P" là gì?
- 29. Hành vi lạ của JSF p: dataTable (mục nhập sai đầu tiên trong p: cột)
- 30. Tại sao các ID tồn tại?
Bạn cũng đã thử nghiệm điều đó chưa? – Tomalak