dwr的远程批量调用

    有时我们为了减少向服务器提交的次数,我们可以向服务器批量提交所要执行的方法。但这样又会给我们带来一些额外的负担,下面将给出解决方法和我们在开发中应该注意的地方。 

可以用DWREngine.setX()来设置全局的或者一个调用(使用比如{ timeout:500, callback:myFunc })或者一次批处理. 一次批处理是几个调用一起被执行.
1.远程批量调用
你可以把几个远程调用用一个batch组织在一起。这样在一个回合里就保存到服务器上,可以减少很多响应时间(latency involved)。
一个batch使用DWREngine.beginBatch()开始,使用DWREngine.endBatch()结束。当endBatch()被调用的时候,我们已经完成了一组集合在一起的远程调用,因此DWR在一个回合里面把他们提交到服务器上执行。
DWR会确保所有的回调函数被调用,因此你可以显式的打开和关闭batch.重要的是不要忘记调用endBatch(),否则你的远程调用会永远在队列中而不被执行。
警告 :
很显然的,批处理很多调用的时候会有一些副作用。如果一个单个的batch中有两个具有不同超时时间(timeout)的调用(call),那么基本上可以说,前面的那个会被忽略,dwr只保留最后那个.
程调用可以批量执行来减少反应时间。endBatch 函数中可以设置选项。
dwr.engine.setTimeout(1000);//全局设置超时
DWREngine.beginBatch();
Remote.method1(params, callback1);
Remote.method2(params, callback2);
DWREngine.endBatch({
timeout:3000 //局部设置超时,优先级高,将覆盖全局设置的超时
});
2.调用排序
因为AJAX通常是一种异步模型远程调用,很有可能返回结果的顺序跟发送请求的顺序是不同的。
DWREngine.setOrdered(boolean)这个方法允许你要求所有的回应都严格跟他们发出请求的顺序保持一致。DWR实现这个的原理是,只有当先发出的请求已经完成的时候才发送一个新的请求。
我们是否希望要确保远程调用执行的顺序跟他们被发出的顺序一致?(这个选项默认是false)
警告: 设置这个选项为true将会使你的应用变慢,并且可能会因为一个消息丢失,浏览器失去响应而使用户离开。
有时候你可能有更好的解决方案来使你的应用正确的使用异步模型。在使用这个方法之前请一定要慎重考虑。
3.设置超时
DWREngine.setTimeout()允许你在call和batch级别调用元数据选项设置超时时间。全局的DWREngine.setTimeout() 函数应用于所有的DWR调用。设置这个值为0可以关闭调用的超时设置(默认就是0)。
setTimeout()的单位是毫秒,如果一个调用超时,那么相应的错误处理器将被调用。比如下面是一个调用级别设置超时的例子:
代码
Remote.method(params, {
callback:function(data) { alert("it worked"); },
errorHandler:function(message) { alert("it false"); },//超时的错误处理函数
timeout:4000
});

如果Remote.method()执行时间超过了4秒,那么,将会显示“it false”。
走笔至此!

你可能感兴趣的:(应用服务器,Ajax,浏览器,DWR)