优化次数过多的循环
作者: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