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 相关文章推荐
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
ie中js创建checkbox默认选中问题探讨
Oct 21 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
window.location 对象所包含的属性
Oct 10 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
Mar 04 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
微信小程序实现自定义picker选择器弹窗内容
May 26 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
javascript实现文字跑马灯效果
Jun 18 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动态生成虚拟现实VRML网页
2006/10/09 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
jquery使用经验小结
2015/05/20 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
python基础教程之序列详解
2014/08/29 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python处理RSTP视频流过程解析
2020/01/11 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
精选干货:Java精选笔试题附答案
2014/01/18 面试题
入党申请自荐书范文
2014/02/11 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
红色电影观后感
2015/06/18 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers