2010-09-29 35 views
8

document.getElementsByTagName('a').item(0)list.item (0) vs danh sách [0]

document.getElementsByTagName('a')[0]

sẽ trả lại kết quả tương tự ...

Là cựu nhanh hơn sau này?

+0

Đó không phải là mảng. – SLaks

+0

Không có kết quả, nó sẽ không mater. Nếu bạn đang sử dụng Javascript (trên một trình duyệt Web) cho hiệu suất bạn đang sử dụng ngôn ngữ sai. Bạn nên tập trung vào việc xem xét khác, chẳng hạn như khả năng đọc. – HoLyVieR

+0

@HoLyVieR chỉ là một câu hỏi được tạo ra bởi một bài đăng trên blog. Tôi muốn tìm sự khác biệt là tối thiểu. – xandercoded

Trả lời

5

Kiểm tra hiệu suất tự thực hiện: http://jsfiddle.net/438jh/2/

Sự khác biệt có vẻ không đáng kể. Phương pháp thứ hai thực hiện tốt hơn trong hầu hết trường hợp, nhưng nếu bạn có một cái nhìn về mức độ thường xuyên của vòng lặp được thực hiện nó không thực sự quan trọng.

Chrome:

  1. phương pháp: ~ 260ms
  2. phương pháp: ~ 170ms
+0

Thử jsFiddle của bạn trong Firefox 3.6.6, tôi nhận được khoảng 250 cho phương thức đầu tiên và 475 cho phương thức thứ hai. –

+0

kết quả trong ie8: test1: 5000+ test2: ~ 2000. Tôi thậm chí phải đấm "không" khi IE yêu cầu tôi ngừng chạy tập lệnh trong khi thử nghiệm 2 và nó vẫn nhanh hơn đáng kể. – lincolnk

+0

@Daniel: trong Firefox 3.6.8. Tôi nhận được ~ 640 và ~ 460 .... –

0

chức năng mục là thành viên của NodeList đối tượng DOM. NodeLists giống như mảng nhưng chúng không phải là mảng thực (ví dụ: chúng là trực tiếp, chỉ đọc, thiếu các hàm mảng).

Sự khác biệt hiệu suất sẽ không đáng kể.

+0

Yeap, tôi đọc bài này trước khi đăng ... http://www.nczonline.net/blog/2010/09/28/why-is-getelementsbytagname-faster-that- queryselectorall/ – xandercoded

+1

tôi khuyên bạn nên tập trung vào các tối ưu hóa quan trọng hơn. – galambalazs

0

Để biết ví dụ thực tế hơn, kỹ thuật này có hiệu suất tốt nhất. Nhìn vào công việc của Nicholas Zakas, YAHOO! để biết thêm ví dụ:

var cachedDOMquery = Array.prototype.slice.apply(document.getElementsByTagName('a')), 
i = cachedDOMquery.length, 
item; 
while(i--){ 
    item = cachedDOMquery[i]; 
    alert(item.href); 
} 
Các vấn đề liên quan