国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js 優(yōu)化次數(shù)過多的循環(huán) 考慮到性能問題

2019-11-20 23:54:52
字體:
供稿:網(wǎng)友
假設(shè)要生成一千萬個隨機(jī)數(shù),常規(guī)的做法如下:
復(fù)制代碼 代碼如下:

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)體清空,提示仍然存在。于是,我得出了一個結(jié)論:在IE下,一旦循環(huán)次數(shù)超過了某個特定值,就會彈出停止腳本的提示。

原因找到了,該如何解決呢?我首先想到的是把一千萬次循環(huán)分成若干個次數(shù)較少的循環(huán)。比如分成一百次,每次執(zhí)行十萬次循環(huán):
復(fù)制代碼 代碼如下:

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)化如下:
復(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();
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金湖县| 乌兰县| 桂阳县| 南充市| 石嘴山市| 台中市| 瑞安市| 娄烦县| 肥东县| 德庆县| 凤山县| 无棣县| 广宁县| 大冶市| 浠水县| 襄汾县| 灵武市| 滕州市| 军事| 霍林郭勒市| 六盘水市| 梁平县| 清苑县| 驻马店市| 海晏县| 富阳市| 天峨县| 东兴市| 曲阳县| 竹北市| 申扎县| 夏河县| 淮滨县| 万盛区| 孝感市| 长武县| 宁德市| 米易县| 易门县| 南丹县| 宜城市|