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 读取XML数据,在页面中展现、编辑、保存的实现
Oct 27 Javascript
Grid得到选择行数据的方法总结
Jan 17 Javascript
JS实现遮罩层效果的简单实例
Nov 12 Javascript
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
JSF中confirm弹出框的用法示例介绍
Jan 07 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
详细解读AngularJS中的表单验证编程
Jun 19 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
node基于puppeteer模拟登录抓取页面的实现
May 09 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
vue中使用v-model完成组件间的通信
Aug 22 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
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
Python实现批量下载文件
2015/05/17 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
python 剪切移动文件的实现代码
2018/08/02 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
详解python持久化文件读写
2019/04/06 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Python验证码截取识别代码实例
2020/05/16 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
应届大学生自荐信格式
2013/09/21 职场文书
精彩的英文自荐信
2014/01/30 职场文书
预备党员转正考核材料
2014/06/03 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
手机被没收的检讨书
2014/10/04 职场文书
Django migrate报错的解决方案
2021/05/20 Python