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 相关文章推荐
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
Three.js源码阅读笔记(光照部分)
Dec 27 Javascript
JQuery入门基础小实例(1)
Sep 17 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
Jan 13 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
vuex实现及简略解析(小结)
Mar 01 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 08 Javascript
vue中axios的二次封装实例讲解
Oct 14 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
Mar 23 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 分页类实现代码
2009/12/03 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
利用python求相邻数的方法示例
2017/08/18 Python
Atom的python插件和常用插件说明
2018/07/08 Python
python 以16进制打印输出的方法
2018/07/09 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
文秘专业自荐信
2013/10/14 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
小学教师办公室制度
2014/02/03 职场文书
产品质量承诺书范文
2014/03/27 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers