Tìm kiếm trang web

Javascript: Tại sao bài kiểm tra hiệu năng này lại cho thấy array.shift() nhanh hơn nhiều so với array[i] khi đọc các giá trị từ một mảng?


Chỉ một câu hỏi nhanh. Tôi đã tạo ra bảng đánh giá (liên kết bên dưới), và ít nhất đối với tôi (chạy chrome 18.0.1025), đọc giá trị từ đầu mảng bằng cách sử dụng array.shift() mỗi lần dường như nhanh hơn đáng kể so với việc đọc các giá trị bằng vòng lặp while/for và truy cập chúng theo chỉ số.

Tôi chắc chắn điều này không thể đúng, vì shift() còn rất nhiều việc phải làm, nhưng cùng lúc đó tôi không thể thấy mình đã làm gì sai để giải thích cho sự khác biệt khá cực đoan này?

http://jsperf.com/some-array-reading-comparisons

Cảm ơn vì đã đọc, James

Câu trả lời #1

Bạn chỉ đang thiết lập mảng của mình một lần cho mỗi bài kiểm tra, và do đó chỉ lần lặp đầu tiên của bài kiểm tra shift có dữ liệu để làm việc. Các lần lặp tiếp theo có mảng trống còn lại từ lần lặp đầu tiên và kết thúc ngay lập tức.

Đây là bộ kiểm tra đã được sửa, nơi các thuật toán biến đổi hoạt động trên một bản sao của dữ liệu. Thuật toán shift thường đứng cuối cùng về hiệu suất.