首頁 > web前端 > js教程 > 主體

js 優化次數過多的循環 考慮到效能問題

高洛峰
發布: 2017-02-04 13:18:53
原創
1328 人瀏覽過

假設要產生一千萬個隨機數,常規的做法如下: 

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中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板