DWR (Direct Web Remoting) 是一种用于在Web应用中实现客户端与服务器之间的远程调用的技术,它支持批量调用和超时设置,以提高性能并减少网络通信次数。本文主要讨论了如何有效地利用DWR进行远程批量调用以及需要注意的关键点。 首先,批量调用在DWR中是一种常见的优化策略,通过一次性发送多个请求到服务器,可以减少HTTP请求数量,从而提高效率。然而,这种做法并非无条件适用,因为批量处理涉及到了服务器端的响应时间和网络延迟(latency involved)。在使用DWREngine.beginBatch()开始一个批处理后,所有后续的调用都将被包含在这个批处理中,直到调用DWREngine.endBatch()结束。这期间,如果批处理中的任何一个请求超时,整个批处理都会失败,因此需要合理设置每个请求的超时时间。 其次,为了确保调用的有序性,DWR提供了setOrdered()方法来控制是否按照调用顺序执行。默认情况下,批量调用是无序的,这意味着方法可能会异步执行,可能导致数据处理的不确定性。如果希望保持方法的执行顺序,应将setOrdered()设为true,但这可能会影响性能,因为服务器需要维护更多的内部状态。开发者需权衡性能与控制需求来决定是否开启有序模式。 在处理超时时,DWR允许用户在批处理的开始和结束时分别设置全局和单个请求的超时时间。全局超时(DWR.engine.setTimeout())应用于批处理开始前,而单个请求的超时可以在调用时指定。当一个请求的执行超过其设定的超时时,它会触发错误处理函数(errorHandler),而不是影响整个批处理的完成。此外,开发者应注意,setTimeout()的参数实际上是在批处理开始时设置的,因此不能期望它在每个单独请求上都起作用。 最后,关于错误处理,虽然批处理的全局超时可能导致单个请求的异常,但在回调函数中仍然可以捕获错误。开发者应编写适当的错误处理代码,以便在出现异常时通知用户或采取补救措施。 总结来说,DWR的远程批量调用是一种优化技术,但需要根据应用场景和性能需求合理设置超时和顺序。开发者应充分理解批处理的工作原理、超时机制以及错误处理,以充分利用DWR提高Web前端的用户体验和性能。同时,灵活运用这些功能,可以在保证性能的同时,提供稳定和可靠的远程调用服务。
dwr的远程批量调用
文章分类:Web前端 关键字: 批量调用和超时设置注意事项
有时我们为了减少向服务器提交的次数,我们可以向服务器批量提交所要执行的方法。但这样又会给我们带来一些额外的负担,下面将给出解决方法和我们在开发中应该注意的地方。
可以用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()的单位是毫秒,如果一个调用超时,那么相应的错误处理器将被调用。比如下面是一个调用级别设置超时的例子:
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 7
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 彩虹rain bow point鼠标指针压缩包使用指南
- C#开发的C++作业自动批改系统
- Java实战项目:城市公交查询系统及部署教程
- 深入掌握Spring Boot基础技巧与实践
- 基于SSM+Mysql的校园通讯录信息管理系统毕业设计源码
- 精选简历模板分享:简约大气,适用于应届生与在校生
- 个性化Windows桌面:自制图标大全指南
- 51单片机超声波测距项目源码解析
- 掌握SpringBoot实战:深度学习笔记解析
- 掌握Java基础语法的关键知识点
- SSM+mysql邮件管理系统毕业设计源码免费下载
- wkhtmltox下载困难?找到正确的安装包攻略
- Python全栈开发项目资源包 - 功能复刻与开发支持
- 即时消息分发系统架构设计:以tio为基础
- 基于SSM框架和MySQL的在线书城项目源码
- 认知OFDM技术在802.11标准中的项目实践