JavaScript教程:优化次数过多的循环

2016-02-20 01:10 9 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐JavaScript教程:优化次数过多的循环,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - Web开发 】

假设要生成一千万个随机数,常规的做法如下:
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++) {
    
  }
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

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();

author: heero

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

来源:https://www.tulaoshi.com/n/20160220/1633413.html

延伸阅读
标签: iphone 手机软件
下面是小编自身的机子,iPad Mini 2 测试数据,使用的时间不多,大多数都是在折腾,确实只有23次的充放电次数。 怎么查看呢?首先你需要装一个 iTools(itools Win/itools Mac). 然后连接你的iOS设备,在你的设备上选择信任改电脑,然后会出现如下所示界面,点途中红框位置的电池图标即可,然后就会出...
  请看下面这段代码: procedure TForm1.Button1Click(Sender: TObject); var   strColor: string;   i, R, G, B, p: integer;   strlist: TStringList; begin   strColor := medt.Text + '-';   strlist := TStringList.Create;   try   &...
标签: Web开发
我们先看一个关于Javascript利用循环绑定事件的例子: 例如:一个不确定长度的列表,在鼠标经过某一条的时候改变背景。 !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"   html xmlns="http://www.w3.org/1999/xhtml&quo...
标签: Web开发
extractNodes函数解决各浏览器的节点计算问题。FireFox把换行符也算成一个节点,很不合理啊。 先用appendChild复制前面的四个节点到底部,使得头尾是一样的内容,以作后用。记得做flash补间循环运动的时候就是这样要头尾一样。 通过setInterval隔时运行rolltxt函数。 rolltxt函数首先计算的是间隔停顿的高度,滚动多高就要停顿一下,这个高度...
标签: Web开发
这篇是Nicholas讨论如果防止脚本失控的第二篇,主要讨论了如何重构嵌套循环、递归,以及那些在函数内部同时执行很多子操作的函数。基本的思想和上一节trunk()那个例子一致,如果几个操作没有特定的执行顺序,而且互相不是依赖关系,我们就可以通过异步调用的方式加以执行,不止可以减少执行的次数,还可以防止脚本失控。本文还介绍了通过mem...

经验教程

147

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部