假設要產生一千萬個隨機數,常規的做法如下:
var numbers = []; for (var i = 0; i < 10000000; i++) { numbers.push(Math.random()); }
然而,在IE下執行這段程式碼時,卻彈出了一個視窗提示使用者是否停止這段腳本。出現這種情況,首先想到的是優化循環體。但明顯地,循環體很簡單,沒什麼優化的空間。即使把循環體清空,提示仍然存在。於是,我得出了一個結論:在IE下,一旦循環次數超過了某個特定值,就會跳出停止腳本的提示。
原因找到了,該如何解決呢?我首先想到的是把一千萬次循環分成若干次數較少的循環。例如分成一百次,每次執行十萬次循環:
for (var i = 0, j; i < 100; i++) { for (j = 0; j < 100000; j++) { ...... } }
IE沒有我們想像中笨,它知道總的循環次數還是一千萬次。因此,得把這一百個十萬次循環分開執行。雖然Javascript是單線程的,但也可以透過setTimeout或setInterval來模擬多執行緒。整段程式碼最佳化如下:
var numbers = []; function begin() { for (var i = 0; i < 100000; i++) { numbers.push(Math.random()); } if (numbers.length < 10000000) { // 是否已完成 setTimeout(begin, 0); } else { alert("complete"); } } begin();
更多js 優化次數過多的循環 考慮到效能問題相關文章請關注PHP中文網!