js 優(yōu)化次數(shù)過(guò)多的循環(huán) 考慮到性能問(wèn)題
更新時(shí)間:2011年03月05日 23:55:15 作者:
IE沒(méi)有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬(wàn)次。因此,得把這一百個(gè)十萬(wàn)次循環(huán)分開(kāi)執(zhí)行。雖然Javascript是單線程的,但也可以通過(guò)setTimeout或setInterval模擬多線程。
假設(shè)要生成一千萬(wàn)個(gè)隨機(jī)數(shù),常規(guī)的做法如下:
var numbers = [];
for (var i = 0; i < 10000000; i++) {
numbers.push(Math.random());
}
然而,在IE下執(zhí)行這段代碼時(shí),卻彈出了一個(gè)窗口提示用戶是否停止這段腳本。出現(xiàn)這種情況,首先想到的是優(yōu)化循環(huán)體。但明顯地,循環(huán)體很簡(jiǎn)單,沒(méi)什么優(yōu)化的余地。即使把循環(huán)體清空,提示仍然存在。于是,我得出了一個(gè)結(jié)論:在IE下,一旦循環(huán)次數(shù)超過(guò)了某個(gè)特定值,就會(huì)彈出停止腳本的提示。
原因找到了,該如何解決呢?我首先想到的是把一千萬(wàn)次循環(huán)分成若干個(gè)次數(shù)較少的循環(huán)。比如分成一百次,每次執(zhí)行十萬(wàn)次循環(huán):
for (var i = 0, j; i < 100; i++) {
for (j = 0; j < 100000; j++) {
......
}
}
IE沒(méi)有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬(wàn)次。因此,得把這一百個(gè)十萬(wàn)次循環(huán)分開(kāi)執(zhí)行。雖然Javascript是單線程的,但也可以通過(guò)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();
復(fù)制代碼 代碼如下:
var numbers = [];
for (var i = 0; i < 10000000; i++) {
numbers.push(Math.random());
}
然而,在IE下執(zhí)行這段代碼時(shí),卻彈出了一個(gè)窗口提示用戶是否停止這段腳本。出現(xiàn)這種情況,首先想到的是優(yōu)化循環(huán)體。但明顯地,循環(huán)體很簡(jiǎn)單,沒(méi)什么優(yōu)化的余地。即使把循環(huán)體清空,提示仍然存在。于是,我得出了一個(gè)結(jié)論:在IE下,一旦循環(huán)次數(shù)超過(guò)了某個(gè)特定值,就會(huì)彈出停止腳本的提示。
原因找到了,該如何解決呢?我首先想到的是把一千萬(wàn)次循環(huán)分成若干個(gè)次數(shù)較少的循環(huán)。比如分成一百次,每次執(zhí)行十萬(wàn)次循環(huán):
復(fù)制代碼 代碼如下:
for (var i = 0, j; i < 100; i++) {
for (j = 0; j < 100000; j++) {
......
}
}
IE沒(méi)有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬(wàn)次。因此,得把這一百個(gè)十萬(wàn)次循環(huán)分開(kāi)執(zhí)行。雖然Javascript是單線程的,但也可以通過(guò)setTimeout或setInterval模擬多線程。整段代碼優(yōu)化如下:
復(fù)制代碼 代碼如下:
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教程:關(guān)于if簡(jiǎn)寫(xiě)語(yǔ)句優(yōu)化的方法
- js中if語(yǔ)句的幾種優(yōu)化代碼寫(xiě)法
- nodejs的10個(gè)性能優(yōu)化技巧
- JavaScript性能優(yōu)化之小知識(shí)總結(jié)
- js性能優(yōu)化 如何更快速加載你的JavaScript頁(yè)面
- JavaScript也談內(nèi)存優(yōu)化
- JavaScript定時(shí)器和優(yōu)化的取消定時(shí)器方法
- JS對(duì)img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像
- Uglifyjs(JS代碼優(yōu)化工具)入門(mén) 安裝使用
- 深入探究JavaScript中for循環(huán)的效率問(wèn)題及相關(guān)優(yōu)化
- javascript for循環(huán)從入門(mén)到偏門(mén)(效率優(yōu)化+奇特用法)
- 整理AngularJS框架使用過(guò)程當(dāng)中的一些性能優(yōu)化要點(diǎn)
- javascript定時(shí)器取消定時(shí)器及優(yōu)化方法
- JavaScript中對(duì)循環(huán)語(yǔ)句的優(yōu)化技巧深入探討
- JS代碼優(yōu)化技巧之通俗版(減少js體積)
- angularjs的一些優(yōu)化小技巧
- Extjs優(yōu)化(二)Form表單提交通用實(shí)現(xiàn)
- JS代碼優(yōu)化的8點(diǎn)建議
相關(guān)文章
Bootstrap編寫(xiě)一個(gè)兼容主流瀏覽器的受眾門(mén)戶式風(fēng)格頁(yè)面
這篇文章主要介紹了Bootstrap編寫(xiě)一個(gè)兼容IE8、谷歌等主流瀏覽器的受眾門(mén)戶式風(fēng)格頁(yè)面,感興趣的小伙伴們可以參考一下2016-07-07
TypeScript中定義變量方式以及數(shù)據(jù)類(lèi)型詳解
TypeScript支持 JavaScript的所有語(yǔ)法和語(yǔ)義,同時(shí)通過(guò)作為ECMAScript的超集來(lái)提供一些額外的功能,如類(lèi)型檢測(cè)和更豐富的語(yǔ)法,這篇文章主要給大家介紹了關(guān)于TypeScript中定義變量方式以及數(shù)據(jù)類(lèi)型詳解的相關(guān)資料,需要的朋友可以參考下2022-08-08
javaScript產(chǎn)生隨機(jī)數(shù)的用法小結(jié)
這篇文章主要介紹了javaScript產(chǎn)生隨機(jī)數(shù)的用法小結(jié),包括JavaScript Math.random()內(nèi)置函數(shù) ,Js 隨機(jī)數(shù)產(chǎn)生6位數(shù)字的代碼,需要的朋友可以參考下2018-04-04
javascript實(shí)現(xiàn)的字符串與十六進(jìn)制表示字符串相互轉(zhuǎn)換方法
這篇文章主要介紹了javascript實(shí)現(xiàn)的字符串與十六進(jìn)制表示字符串相互轉(zhuǎn)換方法,涉及javascript字符串轉(zhuǎn)換的相關(guān)技巧,在防止SQL注入和XSS中具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
JS選項(xiàng)卡動(dòng)態(tài)替換banner圖片路徑的方法
這篇文章主要介紹了JS選項(xiàng)卡動(dòng)態(tài)替換banner圖片路徑的方法,涉及javascript操作文件css樣式的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05
jquery庫(kù)文件略龐大用純js替換jquery的方法
jquery庫(kù)文件略龐大,因此在某些情況下就需要用純js替換jquery,需要的朋友可以參考下2014-08-08
JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方法分析
這篇文章主要介紹了JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方法,結(jié)合實(shí)例形式分析了javascript使用object構(gòu)造函數(shù)和對(duì)象字面量來(lái)創(chuàng)建對(duì)象的相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
js瀏覽器本地存儲(chǔ)store.js介紹及應(yīng)用
store.js 是一個(gè)兼容所有瀏覽器的 LocalStorage 包裝器,不需要借助 Cookie 或者 Flash。store.js 即可實(shí)現(xiàn)本地存儲(chǔ)功能2014-05-05

