`
yiheng
  • 浏览: 153897 次
社区版块
存档分类

使用递归算法将批量调用异步处理转化为同步调用,并使用Java模拟ExtJs异步处理同步化(续)

阅读更多

上一篇文章(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',
				success:function(response) {
					++index;
					isCanDo = true;
				},
				scope:this
			});						
						
			isCanDo = false;
		}			
	}, 10);
}

使用如下方法,性能应该和for循环差不多,同时实现了递归逻辑、批量异步请求同步的问题,因此对于javascript,上面的实现是很好的方式。


 

分享到:
评论

相关推荐

    Java递归算法构造JSON树形结构

    在 Java 中,使用递归算法可以将树形结构数据处理成 JSON 格式。在这个示例代码中,我们使用了 json-lib.jar 包将 List 序列化成 JSON。首先,我们需要定义一个 TreeBuilder 类,该类包含了构建树形结构的方法。 ...

    VC对磁盘文件遍历搜索的递归算法和非递归算法

    非递归算法,也称为迭代算法,通常使用堆栈或队列来模拟递归行为,而避免了函数的多次调用。在遍历文件系统时,它会将目录添加到数据结构中,然后依次处理这些目录,直到找到目标文件或遍历完所有目录。非递归算法在...

    递归算法与非递归转化

    递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解。递归的效率一般不高,但是递归比较符合人类的思维方式。一般而言非递归算法更有效;但很多时候递归算法容易实现,...

    递归算法与循环算法的分析

    递归算法与循环算法的分析 递归算法是指在程序设计中,在调用一个函数...8. 递归算法和循环算法在二分查找算法中的应用:递归算法和循环算法的时间复杂度都为 O(logn),但是循环算法的空间复杂度较低,且更容易实现。

    5!递归算法和非递归算法

    递归步骤定义了如何将大问题转化为小问题的过程,并且最终会归结到基本情况。递归步骤需要精心设计以确保每一次递归都能朝着终止条件迈进。 #### 非递归算法 非递归算法不直接调用自身,而是通过循环等其他方式来...

    .net 递归算法 .net 递归算法.net 递归算法

    2. **递归情况(Recursive Case)**:这是函数调用自身的部分,将原问题转化为更小的子问题。每次递归调用都会使问题规模减小,直到达到基础情况。 递归在.NET中可以用于各种应用,例如: - **树形结构遍历**:如...

    java编写的递归算法的经典事例

    ### Java编写的递归算法的经典事例:全排列输出 #### 概述 本文将详细介绍一个用Java编写的递归算法实例,该实例用于实现字符数组的所有可能全排列。通过这个例子,我们可以深入理解递归的基本概念、工作原理以及...

    acm递归算法总结竞赛

    7. **动态规划与记忆化**:为了优化递归算法,可以采用动态规划的思想,将已经计算过的子问题结果存储起来,避免重复计算,这种方法称为记忆化搜索。 8. **递归与分治策略**:递归往往是分治算法的实现方式,如快速...

    数据结构与算法(JAVA篇)之递归算法

    当追求更高的效率时,可以将递归算法转换为基于栈的非递归算法,甚至进一步优化为仅使用循环的非递归算法。然而,在一些更复杂的情况下,虽然可以转换为基于栈的非递归算法,但无法完全消除栈的使用。此外,有些递归...

    用递归算法实现整数逆序

    2. **递归步骤(Recursive Step)**:定义如何将问题分解为更小的问题,并调用自身解决这些子问题。 #### 递归与循环的区别 虽然递归和循环都可以用来重复执行某段代码,但它们之间存在明显的区别: - **递归**:...

    Java递归算法(PPT+PDF+Word)

    3. **处理递归情况**:将原问题分解为较小的子问题,并调用自身解决。 4. **合并结果**:将所有子问题的结果组合成原问题的答案。 文档"Java递归算法.docx"可能包含了关于如何在实际代码中应用递归的例子,例如经典...

    java递归算法

    Java递归算法是一种编程技术,它允许函数或方法在执行过程中调用自身。递归通常用于解决具有重复子问题的问题,通过将复杂问题分解成更小的子问题来简化处理。这种策略的关键在于存在一个终止条件,即所谓的递归基,...

    合并排序递归和非递归算法

    合并排序是一种基于分治策略的高效排序算法,它将大问题分解为小问题来解决,然后将小问题的结果合并以得到最终的解决方案。这个过程既可以用递归方式实现,也可以用非递归方式实现。 首先,让我们来看看递归版本的...

    可并行递归算法的递归多线程实现

    递归多线程算法的实现,特别是使用Java这样的现代编程语言,为并行计算提供了一个强大的框架。通过对递归算法的多线程化,我们可以显著提高算法的执行速度和响应能力,尤其是在面对大规模数据集时。未来的研究方向...

    程序设计中递归算法

    - **手动模拟递归过程**:使用显式的数据结构(如栈)来保存递归调用的上下文,从而模拟递归调用的行为。 总之,递归算法是程序设计中一种非常强大的技术,它不仅可以帮助我们更简洁地解决问题,而且还能提高代码的...

    Hanoi塔问题的一种非递归算法

    递归算法通过将问题分解为规模较小的子问题来解决整个问题,具体实现如下: ```cpp void hanoi(int n, char one, char two, char three) { if (n == 1) move(one, three); else { hanoi(n-1, one, three, two); ...

    递归算法详解递归算法详解

    通过将大问题分解为规模更小的相同或相似子问题来解决,递归算法常常用于简化复杂的计算任务。以下是对递归算法的详细解释: 1. **递归的基本概念**: - 在数学和计算机科学中,递归是指一个对象或过程在其定义中...

    博图SCL递归算法及如何使用在工控现场案例

    1、递归算法是一种直接或者间接调用自身函数或者方法的算法,就是将复杂问题不断分解为规模缩小的子问题,然后递归调用方法求解 2、递归思维是一种从下向上的思维方式,使用递归算法往往可以简化我们的代码,而且还...

Global site tag (gtag.js) - Google Analytics