UPDATE:
Rất nhiều các thủ thuật cũ trong các câu trả lời là tuyệt vời cho giải thích JS trong trình duyệt cũ.
Trong mọi triển khai JS hiện đại bao gồm tất cả các trình duyệt hiện đại, Node và các bản xem trước trên thiết bị di động mới nhất, các chức năng nội tuyến có thể được JIT (trình biên dịch JS) lưu vào bộ nhớ cache. Nó được sử dụng để được đối diện, nơi chỉ cần thực hiện cuộc gọi đến một chức năng nhiều lần yêu cầu một quá trình xây dựng/teardown có thể làm giảm nghiêm trọng hiệu suất của một vòng lặp không tầm thường.
Để có hiệu suất tốt nhất, tôi muốn tránh tham chiếu bất kỳ thứ gì không được chuyển làm đối số hoặc được xác định bên trong chính hàm nếu bạn không phải làm như vậy. Tôi không chắc chắn 100% rằng vấn đề nhưng tôi có thể thấy lý do tại sao nó có thể.
Giá trị tốt hơn liên quan đến bất kỳ loại quy trình tra cứu nào như độ dài mảng hoặc thuộc tính nút DOM có lẽ cũng được lưu vào bộ nhớ cache tốt nhất.
Nhưng ngoài ra tôi muốn cố gắng chỉ để nguyên tắc cơ bản về tránh việc làm hướng dẫn những nỗ lực tuyệt vời của bạn. Việc tính toán trước những thứ không cần phải tính toán lại trong một vòng lặp, hoặc việc lưu vào bộ nhớ đệm một kết quả của bộ chọn truy vấn là var thay vì lục lọi trong DOM nhiều lần là những ví dụ hay về điều này. Cố gắng hết sức để tận dụng lợi thế của hành vi JIT có lẽ sẽ trở nên khá phức tạp và không có khả năng nắm giữ theo thời gian hoặc trên tất cả các JIT.
OLD ĐÁP:
Ok, quên tường văn bản. điểm Bullet:
var i = someArray.length; //length is cached
someArray.reverse(); //include this only if iterating in 0-(length-1) order is important
while(i--){
//run a test statement on someArray[i];
}
chiều dài bộ nhớ đệm và ngay lập tức được chuyển thể thành các chỉ số
Lợi ích của việc lặp lại ngược trong JS AFAIK là tránh một toán tử logic với hai toán hạng. Trong trường hợp này, chúng tôi chỉ đang đánh giá một số. Đó là sự thật hoặc nó là số không và sai.
Tôi cũng thấy nó thanh lịch.
Nguồn
2012-04-02 19:02:29
'forEach' có thể có một số tối ưu hóa gốc hoặc cái gì đó. –
Hơn nữa, bạn thậm chí không nhận được giá trị từ mảng trong Test Case 1, bạn đang ghi nhật ký thay vì 'mảng [i]' –
1), bạn không nên tạo mảng trên mọi thử nghiệm, bạn có thể xác định vars có thể truy cập được trên tất cả các thử nghiệm 2) bạn đang kiểm tra '.length' mỗi vòng – ajax333221