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 相关文章推荐
Ext中下拉列表ComboBox组件store数据格式用法介绍
Jul 15 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
Aug 05 Javascript
jQuery EasyUI之DataGrid使用实例详解
Jan 04 Javascript
详解JavaScript中localStorage使用要点
Jan 13 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
简单理解Vue条件渲染
Dec 03 Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
Jul 09 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
Sep 11 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
详解前端任务构建利器Gulp.js使用指南
Apr 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
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
模块化react-router配置方法详解
2019/06/03 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
Python中对列表排序实例
2015/01/04 Python
浅析Python函数式编程
2018/10/06 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python安装scipy的步骤解析
2019/09/28 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
Python如何读取、写入CSV数据
2020/07/28 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
西尔斯百货官网:Sears
2016/09/06 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
白酒代理协议书范本
2014/10/26 职场文书
瘦西湖导游词
2015/02/03 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python