2010-02-23 30 views
6

Tôi là một fan hâm mộ lớn của việc sử dụng phương pháp foreach trên nodeLists như thế này:Tốc độ [] .forEach.call (...

var nodes = document.querySelectorAll(".foo"); 

[].forEach.call(nodes, function (item) { 
    //do stuff with item 
}); 

tôi đã tự hỏi, mặc dù không làm nó theo cách đó mất dài hơn cách thường xuyên? ví dụ

for(var i=0;i<nodes.length;i++){ 
    //do stuff with nodes[i]; 
} 
+3

BTW 'for (var i = 0, el; el = nút [i]; i ++) 'công trình cũng :) –

+0

Bạn đã có một trường hợp hiệu suất cụ thể mà bạn đang cố gắng để giải quyết? Nếu không thì trường hợp nào bạn có thể tránh tối ưu hóa sớm. – mikemaccana

Trả lời

7

Dưới đây là một nice performance comparison. Theo đó Array.forEach là chậm hơn so với một vòng lặp for bản địa.

+0

Chúc mừng, cảm ơn vì liên kết. Đó là chính xác những gì tôi đã sau. BTW, tốc độ jQuery.each hơi đáng ngạc nhiên. – Yansky

1

nó tùy theo tính chất ds trên trình duyệt. Và đừng quên trong khi() nhanh nhất trên Firefox 4. Here's a comparison.

Cũng xin lưu ý rằng nếu bạn đang hỗ trợ các trình duyệt cũ hơn không hỗ trợ choEach, bạn cần thêm thời gian cần thiết vào implement a polyfill.

4

Tôi biết đó là một bài đăng cũ nhưng sử dụng phương pháp forEach có thể được thực hiện bằng cách ăn cắp nguyên mẫu Array.

NodeList.prototype.forEach = Array.prototype.forEach; 
+0

+1 Thực hiện thao tác này một lần, sau đó có someNodeList.forEach() trông gọn gàng hơn hoặc sử dụng .call() cho mỗi vòng lặp hoặc sử dụng kiểu ES3 khổng lồ 'cho' vòng – mikemaccana

+1

Nhưng [thông số ES5] (http: // es5 .github.io/# x15.4.4.18) nói rằng "cho dù chức năng forEach có thể được áp dụng thành công cho một đối tượng host [như NodeList] là phụ thuộc vào thực thi hay không." Theo như tôi biết, Chrome và Firefox hỗ trợEEach trên các đối tượng lưu trữ. Tôi không biết về IE, Safari, Opera, v.v. –

+0

Nó phụ thuộc vào việc triển khai thực hiện nhưng điều này sẽ không tạo ra bất kỳ sự khác biệt nào đối với việc triển khai trên các trình duyệt đã làm như vậy (tôi chưa thực sự tìm thấy) .) –