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 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
分享一个精简的vue.js 图片lazyload插件实例
Mar 13 Javascript
JS实现简易的图片拖拽排序实例代码
Jun 09 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
AngularJS $http post 传递参数数据的方法
Oct 09 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
Oct 20 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
Jul 17 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 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执行zip与rar解压缩方法实现代码
2010/12/05 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
python中def是做什么的
2020/06/10 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
给公司的建议书范文
2014/05/13 职场文书
党章培训心得体会
2014/09/04 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
react合成事件与原生事件的相关理解
2021/05/13 Javascript
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA
SQL Server中锁的用法
2022/05/20 SQL Server