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调用客户端的可执行文件(示例代码)
Nov 28 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
javascript实现拖放效果
Dec 16 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
使用SVG基本操作API的实例讲解
Sep 14 Javascript
React Native中TabBarIOS的简单使用方法示例
Oct 13 Javascript
原生js调用json方法总结
Feb 22 Javascript
微信小程序渲染性能调优小结
Jul 30 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循环输出数据库内容的代码
2008/05/24 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
Python 深入理解yield
2008/09/06 Python
python实现每次处理一个字符的三种方法
2014/10/09 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
python关键字and和or用法实例
2015/05/28 Python
python编码最佳实践之总结
2016/02/14 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
python pygame实现球球大作战
2019/11/25 Python
介绍一些UNIX常用简单命令
2014/11/11 面试题
毕业生找工作推荐信
2013/11/21 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
水电工程师岗位职责
2015/02/13 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang