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查错流程归纳
May 04 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
js获取数组的最后一个元素
Apr 14 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
微信小程序-消息提示框实例
Nov 24 Javascript
canvas 绘制圆形时钟
Feb 22 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
使用vue-cli导入Element UI组件的方法
May 16 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 06 Javascript
JavaScript onclick事件使用方法详解
May 15 Javascript
js面向对象编程OOP及函数式编程FP区别
Jul 07 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python取代netcat过程分析
2018/02/10 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
原生python实现knn分类算法
2019/10/24 Python
python导入库的具体方法
2020/06/18 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
IBatis持久层技术
2016/07/18 面试题
英文版餐饮业求职信
2013/10/18 职场文书
公司前台辞职报告
2014/01/19 职场文书
银行求职信
2014/05/31 职场文书
金融管理专业求职信
2014/07/10 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS