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 相关文章推荐
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
Feb 13 Javascript
javascript快速排序算法详解
Sep 17 Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
JavaScript实现弹出广告功能
Mar 30 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
Jun 05 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
基于layui table返回的值的多级嵌套的解决方法
Sep 19 Javascript
聊聊Vue中provide/inject的应用详解
Nov 10 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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
解析php入库和出库
2013/06/25 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
详解Python的Django框架中的中间件
2015/07/24 Python
python实现画一颗树和一片森林
2018/06/25 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
英国办公用品商店:Office Outlet
2018/04/04 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
2014年清明节寄语
2014/04/03 职场文书
实习报告评语
2014/04/26 职场文书
兽医医药专业求职信
2014/07/27 职场文书
财务管理专业自荐书
2014/09/02 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
银行员工考核评语
2014/12/31 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
团干部培训班心得体会
2016/01/06 职场文书