Tôi có một ứng dụng mà tôi phải đẩy một giá trị rất nhiều để mảng, vì vậy tôi kiểm tra thời gian thực hiện:setTimeout trong javascript chức năng làm cho chạy nhanh hơn
var st = new Date().getTime();
var a = [];
for (var i = 0; i < 20971520; i++) {
a.push(i);
}
var ed = new Date().getTime();
console.info((ed - st)/1000);
console.info(a.length);
tôi chạy các mã trong Firefox Console và Chrome giao diện điều khiển trực tiếp và chi phí là 37 seconds
. Và trong quá trình thực hiện, ngay cả chuột cũng có thể được di chuyển trong Chrome nhưng không có hiệu ứng tương tác.
Sau đó tôi thay đổi mã:
function push() {
var st = new Date().getTime();
var a = [];
for (var i = 0; i < 20971520; i++) {
a.push(i);
}
var ed = new Date().getTime();
console.info((ed - st)/1000);
console.info(a.length);
}
var tr = setTimeout(push, 50);
Đơn giản hóa đưa các mã trong một hàm, và gọi nó bằng cách sử dụng setTimeout
, nó có giá 0.844 second
. Và trong quá trình thực hiện, tôi có thể hoạt động bình thường trong Chrome.
gì đang xảy ra ở đây?
Tôi biết rằng setTimeout
sẽ đặt điều khiển cho trình duyệt để thực hiện công việc giao diện người dùng, điều này sẽ làm cho trang phản hồi. Ví dụ: khi tôi thực hiện một số phép tính trong khi di chuột qua trang, tôi sẽ đặt phép tính được thực hiện chậm để ngăn chặn việc chặn giao diện người dùng.
Nhưng tại sao lại giảm tổng thời gian thực thi của cùng một mã?
Có thể nó chỉ là bộ nhớ đệm. Bạn đã thử trao đổi thứ tự thực hiện chưa, tức là trước tiên chạy biến thể setTimeout và sau đó là biến thể khác? –
Điều gì sẽ xảy ra nếu bạn chỉ gọi 'push() '? – Freez
Phải mất cùng một thời gian có hoặc không có thời gian chờ cho tôi. – DoctorMick