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 相关文章推荐
JS小功能(onmouseover实现选择月份)实例代码
Nov 28 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
jQuery+HTML5实现图片上传前预览效果
Aug 20 Javascript
Jquery 全选反选实例代码
Nov 19 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
利用Vue v-model实现一个自定义的表单组件
Apr 27 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
详解vue中的computed的this指向问题
Dec 05 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漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php中的strpos使用示例
2014/02/27 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python写的ARP攻击代码实例
2014/06/04 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
文明家庭事迹材料
2014/12/20 职场文书
社区活动总结范文
2015/05/07 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
初三化学教学反思
2016/02/22 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书