优化次数过多的循环

作者:heero 时间:2009-11-12 12:35:00 

假设要生成一千万个随机数,常规的做法如下:

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

标签:优化,循环,for,JavaScript
0
投稿

猜你喜欢

  • ASP中模拟PHP的关联数组

    2009-12-25 16:31:00
  • 适合所有表的添加、删除、修改的函数

    2008-04-15 15:29:00
  • TXT.WORD文档下载另存为,而不是在浏览器中打开

    2007-10-25 11:43:00
  • 巧用overflow属性解决中间间距问题

    2007-12-08 20:26:00
  • Mootools 1.2教程(5)——事件处理

    2008-11-19 16:33:00
  • ASP 使用三层架构 asp中使用类

    2011-03-16 10:52:00
  • 支持鼠标拖拽的简单目录树代码

    2011-07-01 12:34:09
  • 如何根据用户银行帐户余额的多少进行显式的提交或终止?

    2009-11-22 19:28:00
  • SQLServer 全文检索(full-text)语法

    2011-12-01 10:38:22
  • 自适应内容高度的收缩与展开

    2007-09-24 14:38:00
  • 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

    2011-12-01 07:53:11
  • 用Dreamweaver设计实现网页过渡转换功能

    2008-09-04 10:09:00
  • 网页编辑常用表现的实现方法

    2010-07-02 16:24:00
  • MySQL数据库搜索中的大小写敏感性

    2008-11-24 12:44:00
  • 保存透明gif时出现锯齿解决法

    2008-06-26 18:10:00
  • Dreamweaver制作网页幻灯片效果

    2010-07-06 13:48:00
  • 用javascript做拖动层布局的思路

    2008-05-30 13:38:00
  • ADSI+ASP添加IP到IIS禁止访问列表中

    2011-04-02 10:42:00
  • CSS技巧之圆角背景与三角形

    2010-10-19 12:40:00
  • FCKeditor 编辑器实战技巧 Ⅰ

    2008-10-08 10:22:00
  • asp之家 网络编程 m.aspxhome.com