上一篇文章(http://blog.csdn.net/scorpio3k/article/details/7875895)中提到在Ex tJs中使用递归处理批量发送异步请求同步化的问题,但后来被指点javascript的递归会存在严重的性能问题,是javascript对递归的实现不好,但java中的递归的思路应该是没有问题的。
对于javascript,原本的思路是这样的:
batchProcess: function(index, length, params){
if(index >= length){
alert('处理结束');
return;
}else{
Ext.Ajax.request({
url:this.url,
params:params[index],
method:'POST',
success:function(response) {
batchProcess(++index, length, params);
},
scope:this
});
}
}
需要对上面的实现进行调整,同时又要满足如下两个条件:
1. 使用异步发送请求;
2. 需要保持多个请求的次序,即前面的请求处理结束后才能执行后面的请求
首先不能使用while(isOk)循环,因为while(isOk)性能太差,会进行非常非常非常多的循环,浏览器就死掉了。
可以使用javascript原生的setInterval方法,模拟while(isOk)循环:
function syncFor(index, length, params){
var isCanDo = true;
setInterval(function(){
if(index >= length){
clearInterval();
return;
}else if(isCanDo){
Ext.Ajax.request({
url:this.url,
params:params[index],
method:'POST',
callback:function(options, success, response) {
if(success){
++index;
isCanDo = true;
}else{
clearInterval();
return;
}
},
scope:this
});
isCanDo = false;
}
}, 100);
}
使用如下方法,性能应该和for循环差不多,同时实现了递归逻辑、批量异步请求同步的问题,因此对于javascript,上面的实现是很好的方式。
分享到:
相关推荐
java递归算法,java递归算法,java递归算法
.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
递归算法转为非递归算法。方法、过程,用栈的原理
VC对磁盘文件遍历搜索的递归算法和非递归算法 里面的文档是讲解递归算法和递归算法的 里面还有一个Vc工程文件,是我自己写的,关于非递归算法,其实里面那些被注释掉的部分是递归算法,大家仔细看看就知道了,
递归算法详解递归算法详解递归算法详解递归算法详解
递归算法与循环算法的分析
1、递归算法是一种直接或者间接调用自身函数或者方法的算法,就是将复杂问题不断分解为规模缩小的子问题,然后递归调用方法求解 2、递归思维是一种从下向上的思维方式,使用递归算法往往可以简化我们的代码,而且还...
Java二分查找递归算法
java编写的递归算法的经典事例。 代码很短,没有点基础理解起来还真有点难度。很有挑战性。 不是我写的。这里只是分享一下。 功能是实现全排列。
5!递归算法和非递归算法,面试专用,适合新手
18.递归算法与递归算法应用.ppt
/** * * @author SunnyMoon */ /** * 概念介绍: * * 递归的二分查找: 想用最少的比较次数在一个有序的数组中找到一个给定的数据项。...如果有效率需求的时候,可以再考虑将递归转化成非递归。 */
java实现的经典递归算法三例 十分的经典,可以学习一下
java 数据结构 递归 八皇后 完美递归 java 数据结构 递归 八皇后 完美递归
* 当要求效率的时候可以把弟归转化为基于栈的非递归,进而可以把基于栈的转化为仅有循环的 * 非递归,这种情况下效率是最高的。 * 但是一些复杂的情况可以转化为基于栈的非递归,但是无法消除栈的。 * 一些...
使用递归算法在指定目录下查找文件
acm递归算法总结acm递归算法总结!!!!!!!!!!!!!!!!!!!!!!!
LCS问题 归并排序 矩阵链乘积问题 N皇后问题 贪心算法 快速排序 二分检索 求最大元素最小元素(分治算法) 求n个数的排列(递归)