利用定时器进行任务分割
stargaga
2011-03-30
程序分割:将程序分割为独立的一系列子任务,把每一个任务用定时器分开避免影响正常的UI进程。引自《高性能javascript一书》,此函数可以使用的前提是,任务可以异步处理而不影响用户体验或造成相关代码错误。
code: function multistep(steps, args, callback) { var tasks = steps.concat(); //concat函数赋值原数组,返回一个该数组的副本 setTimeout(function () { var task = tasks.shift(); task.apply(null, args || []); //运用apply函数执行数组顶端的函数 //检查是否还有未处理的函数 if(tasks.length > 0 ) setTimeout(arguments.callee, 25); //用arguments.callee做递归调用 else { callback(); //用于函数执行完成后的返回函数 } }, 25); } 其中的arguments.callee返回自身函数体,可用arguments.callee.toString()查看返回值。 例子: var documentOp = function ( id ) { var tasks = [openDocument, writeText, closeDocument, updateUI]; multistep(tasks, [id], function () { alert("文档处理完毕!"); }); }; //需要注意的是multistep()第二个参数必须是数组形式,因为函数接收的参数形式即为数组 |
|
jackra
2011-04-01
结构好乱....
如此的管道调用会导致回调函数的逆序调用?为什么要如此设计呢? |
|
stargaga
2011-04-01
不会引起回调函数的逆序调用的,这个是用定时器进行任务分割,待“管道”中的函数执行完毕后才进行回调函数的调用。关于这个设计的目的,是为了让javascript不阻碍浏览器的UI进程。
|
|
aokihu
2011-06-20
异步的话也可以用XMLHttpRequest实现啊,这个是异步调取的,可以设置onerror的时候触发制定的函数;
现在html5出来了,也可以用worker实现,不过好像性能影响也很大 |
|
BetaRabbit
2011-06-21
arguments.callee这个东西很影响性能,貌似ES5里面已经被废除了。。。
|
|
stargaga
2011-06-22
aokihu 写道 异步的话也可以用XMLHttpRequest实现啊,这个是异步调取的,可以设置onerror的时候触发制定的函数;
现在html5出来了,也可以用worker实现,不过好像性能影响也很大 我原来的想法也是想在浏览器的环境下,分时跑循环,刚才看了一下worker,好东西,但是对性能影响很大哈。 谢谢回复~大家一起讨论哈 |
相关讨论
相关资源推荐
- RED HAT LINUX 6大全
- 红帽linux企业版6.3版,6.3. 工具 红帽企业版 Linux 6 | Red Hat Customer Portal
- 红帽linux5.9安装,Red Hat Linux 5.9/6.3 ISO安装文件下载相关
- 红帽企业 Linux 6.3 正式版发布
- Red Hat Enterprise Linux RHEL 8.6 下载安装
- 红帽企业 Linux 6.3 正式版 下载地址
- redhat linux 系统修复,Red Hat 6企业版系统故障修复方法
- Red Hat Enterprise Linux 6.3 配置的yum库
- Red Hat Linux Enterprise 6.3都有那些新特性
- Win7下硬盘安装 Red Hat Enterprise Linux 6.3图文方法