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 相关文章推荐
网页里控制图片大小的相关代码
Jun 25 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
JavaScript中的Web worker多线程API研究
Dec 06 Javascript
使用纯javascript实现经典扫雷游戏
Apr 23 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 Javascript
浅谈javascript中遇到的字符串对象处理
Nov 18 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
解决angularjs中同步执行http请求的方法
Aug 13 Javascript
JS无限级导航菜单实现方法
Jan 05 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
给多个地址发邮件的类
2006/10/09 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
webpack入门必知必会
2017/01/16 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
python+opencv实现动态物体识别
2018/01/09 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
Python如何输出警告信息
2020/07/30 Python
饭店服务员岗位职责
2015/02/09 职场文书
西安导游词
2015/02/12 职场文书
大学感恩节活动总结
2015/05/05 职场文书
民间借贷借条范本
2015/05/25 职场文书
公司联欢会主持词
2015/07/04 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript