2012-05-04 42 views
7

Giả sử không có tối ưu hóa điên (Tôi đang xem bạn Chrome).Độ phức tạp về thời gian tra cứu HTML DOM là gì

Tôi đang nói về thô, khó chịu, không bị hỏng - không khắc phục được, tức là v6 javascript, chi phí.

Giới hạn dưới phúc:

document.getElementById() 

Versus:

document.getElementsByTagName('div') lookup. 
+0

Nếu bạn đang tối ưu hóa cho IE 6, tôi khuyên bạn nên xem xét lại phần 'không bị hỏng'. – robrich

+0

@robrich Tôi không tối ưu hóa bất cứ điều gì. Chỉ tò mò thôi. Tôi nghĩ rằng ie6 sẽ đánh dấu sự mỉa mai đằng sau 'aint-breaking'. Có lẽ tôi nên "báo giá không khí" nó cho rõ ràng. –

Trả lời

9

getElementById có thể yên tâm giả định là O(1) trong một trình duyệt hiện đại như một Hashtable là cấu trúc dữ liệu hoàn hảo cho id => ánh xạ phần tử.

Không có bất kỳ sự tối ưu hóa nào đơn giản truy vấn - có thể là bộ chọn css, tra cứu id, tra cứu tên lớp hoặc thẻ - không tệ hơn O(n) vì một lần lặp trên tất cả các phần tử luôn là đủ.

Tuy nhiên, trong trình duyệt tốt, tôi hy vọng nó sẽ có ánh xạ tagname => elements, do đó, getElementsByTagName cũng sẽ là O(1).

+0

và không có bất kỳ tối ưu hóa getElementsByTagName sẽ phải là O (n) ngay cả trong trường hợp tốt nhất vì phần tử cuối cùng có thể là một trong những bạn đang tìm kiếm –

+0

Vì vậy, điều đó có nghĩa là trình duyệt ánh xạ nhiều lượt xem cho mỗi thẻ trên ghi để tối đa hóa tốc độ đọc ? Nó sẽ không tốn nhiều bộ nhớ hơn? –

+0

Việc sử dụng bộ nhớ của các ánh xạ đó sẽ không liên quan. Nó sẽ ít hơn nhiều so với ví dụ một hình ảnh đơn lẻ (chẳng hạn như hình nền trên trang web) được lưu trong bộ nhớ. – ThiefMaster

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