我有我要推很多值,以陣列的應用程序,所以我測試的執行時間:的setTimeout在JavaScript進行函數的運行速度
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);
我直接運行在Firefox控制檯和Chrome控制檯代碼,它的價格是37 seconds
。在執行過程中,即使鼠標可以在Chrome中移動,但沒有交互效果。
然後我改變了代碼:
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);
簡化放碼的功能,並使用setTimeout
調用它,它的成本0.844 second
。在執行過程中,我可以正常操作Chrome。
這是怎麼回事嗎?
我知道setTimeout
會將控制權交給瀏覽器執行UI作業,這將使頁面響應。例如,當我在頁面的鼠標移動過程中進行一些計算時,我會延遲執行計算以防止它阻塞UI。
但是爲什麼它減少了相同代碼的總執行時間?
也許這只是緩存。您是否嘗試交換執行順序,即先運行setTimeout變體,然後運行另一個變體? –
如果你只是調用'push()'會發生什麼? – Freez
無論有沒有超時,我都需要相同的時間。 – DoctorMick