js 优化次数过多的循环 考虑到性能问题


Posted in Javascript onMarch 05, 2011

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

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();
Javascript 相关文章推荐
javascript 播放器 控制
Jan 22 Javascript
cument.execCommand()用法深入理解
Dec 04 Javascript
[JSF]使用DataModel处理表行事件的实例代码
Aug 05 Javascript
js实现遍历含有input的table实例
Dec 07 Javascript
javascript事件冒泡简单示例
Jun 20 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
详解Vue2 SSR 缓存 Api 数据
Nov 20 Javascript
jQuery中库的引用方法
Jan 06 jQuery
详解Js里的for…in和for…of的用法
Mar 28 Javascript
微信小程序事件流原理解析
Nov 27 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 Javascript
微信小程序自定义扫码功能界面的实现代码
Jul 02 Javascript
淘宝搜索框效果实现分析
Mar 05 #Javascript
再论Javascript下字符串连接的性能
Mar 05 #Javascript
再论Javascript的类继承
Mar 05 #Javascript
Array的push与unshift方法性能比较分析
Mar 05 #Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 #Javascript
判断用户是否在线的代码
Mar 05 #Javascript
判断用户的在线状态 onbeforeunload事件
Mar 05 #Javascript
You might like
php实现给一张图片加上水印效果
2016/01/02 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python语言快速上手学习方法
2018/12/14 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
企业演讲比赛主持词
2014/03/18 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
如何利用python实现列表嵌套字典取值
2022/06/10 Python