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 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
Sep 06 Javascript
浅谈vuex之mutation和action的基本使用
Aug 29 Javascript
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
微信小程序实现滚动消息通知
Feb 02 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
Aug 19 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
May 10 Javascript
jquery向后台提交数组的代码分析
Feb 20 jQuery
淘宝搜索框效果实现分析
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 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python实现windows下文件备份脚本
2018/05/27 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
python实现的自动发送消息功能详解
2019/08/15 Python
使用python turtle画高达
2020/01/19 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
历史系自荐信范文
2013/12/24 职场文书
绿色小区申报材料
2014/08/22 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
整改报告怎么写
2014/11/06 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python