js 優(yōu)化次數(shù)過多的循環(huán) 考慮到性能問題
更新時間:2011年03月05日 23:55:15 作者:
IE沒有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬次。因此,得把這一百個十萬次循環(huán)分開執(zhí)行。雖然Javascript是單線程的,但也可以通過setTimeout或setInterval模擬多線程。
假設要生成一千萬個隨機數(shù),常規(guī)的做法如下:
var numbers = [];
for (var i = 0; i < 10000000; i++) {
numbers.push(Math.random());
}
然而,在IE下執(zhí)行這段代碼時,卻彈出了一個窗口提示用戶是否停止這段腳本。出現(xiàn)這種情況,首先想到的是優(yōu)化循環(huán)體。但明顯地,循環(huán)體很簡單,沒什么優(yōu)化的余地。即使把循環(huán)體清空,提示仍然存在。于是,我得出了一個結論:在IE下,一旦循環(huán)次數(shù)超過了某個特定值,就會彈出停止腳本的提示。
原因找到了,該如何解決呢?我首先想到的是把一千萬次循環(huán)分成若干個次數(shù)較少的循環(huán)。比如分成一百次,每次執(zhí)行十萬次循環(huán):
for (var i = 0, j; i < 100; i++) {
for (j = 0; j < 100000; j++) {
......
}
}
IE沒有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬次。因此,得把這一百個十萬次循環(huán)分開執(zhí)行。雖然Javascript是單線程的,但也可以通過setTimeout或setInterval模擬多線程。整段代碼優(yōu)化如下:
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();
復制代碼 代碼如下:
var numbers = [];
for (var i = 0; i < 10000000; i++) {
numbers.push(Math.random());
}
然而,在IE下執(zhí)行這段代碼時,卻彈出了一個窗口提示用戶是否停止這段腳本。出現(xiàn)這種情況,首先想到的是優(yōu)化循環(huán)體。但明顯地,循環(huán)體很簡單,沒什么優(yōu)化的余地。即使把循環(huán)體清空,提示仍然存在。于是,我得出了一個結論:在IE下,一旦循環(huán)次數(shù)超過了某個特定值,就會彈出停止腳本的提示。
原因找到了,該如何解決呢?我首先想到的是把一千萬次循環(huán)分成若干個次數(shù)較少的循環(huán)。比如分成一百次,每次執(zhí)行十萬次循環(huán):
復制代碼 代碼如下:
for (var i = 0, j; i < 100; i++) {
for (j = 0; j < 100000; j++) {
......
}
}
IE沒有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬次。因此,得把這一百個十萬次循環(huán)分開執(zhí)行。雖然Javascript是單線程的,但也可以通過setTimeout或setInterval模擬多線程。整段代碼優(yōu)化如下:
復制代碼 代碼如下:
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();
您可能感興趣的文章:
- javascript教程:關于if簡寫語句優(yōu)化的方法
- js中if語句的幾種優(yōu)化代碼寫法
- nodejs的10個性能優(yōu)化技巧
- JavaScript性能優(yōu)化之小知識總結
- js性能優(yōu)化 如何更快速加載你的JavaScript頁面
- JavaScript也談內(nèi)存優(yōu)化
- JavaScript定時器和優(yōu)化的取消定時器方法
- JS對img標簽進行優(yōu)化使用onerror顯示默認圖像
- Uglifyjs(JS代碼優(yōu)化工具)入門 安裝使用
- 深入探究JavaScript中for循環(huán)的效率問題及相關優(yōu)化
- javascript for循環(huán)從入門到偏門(效率優(yōu)化+奇特用法)
- 整理AngularJS框架使用過程當中的一些性能優(yōu)化要點
- javascript定時器取消定時器及優(yōu)化方法
- JavaScript中對循環(huán)語句的優(yōu)化技巧深入探討
- JS代碼優(yōu)化技巧之通俗版(減少js體積)
- angularjs的一些優(yōu)化小技巧
- Extjs優(yōu)化(二)Form表單提交通用實現(xiàn)
- JS代碼優(yōu)化的8點建議
相關文章
JavaScript 中 JSON.parse 函數(shù) 和 JSON.stringify 函數(shù)
這篇文章主要介紹了JavaScript -- JSON.parse 函數(shù) 和 JSON.stringify 函數(shù),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-12-12Javascript json object 與string 相互轉換的簡單實現(xiàn)
下面小編就為大家?guī)硪黄狫avascript json object 與string 相互轉換的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09