`
hax
  • 浏览: 962848 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

预告:把异步变同步——AJAX之Future模式

    博客分类:
  • AJAX
阅读更多
2008年3月更新:
本系列由于某些原因没有继续完成,可能等过一段时间再完成。
http://qiezi.iteye.com/blog/163182的comments中提到的async_call与这里的思路有类似之处,虽然那是在讨论ErLang。



众所周知,AJAX虽然提高了用户体验,并提出了一种创新的web应用架构模式,但是也带来了一个问题,就是异步编程非常复杂。

单纯一个异步XHR调用或许还不算什么,但当多个XHR交织的时候,复杂性就指数级上升。例如,考虑这样一个人造的例子:

一个股票页面(带劲吧?)

首先从一个数据源读取当前用户所持有的股票种类和数量。

然后读取这些股票的当前价格。由于用户可能持有不同市场的股票(如中国A股、中国B股、香港股票、NADQ……),每个市场数据来自不同的xml源,其格式可能不同。

每个xml源可能使用不同的xslt来转换到html片段,比如中国股票与NADQ股票就用不同的xslt来转换。但有些可能共用相同的xslt,如A股和B股的格式差不多,所以用同样的xslt转换。又,香港股票xml源是首先用一个xslt转换成与A股和B股一样的xml格式,然后再用前述的xslt转换为html片段。

页面还会根据所有数据计算出用户的当前在每个市场上市值,以及总市值。


好了,以上这些,如果用传统的异步方式做,你会看到多少callback漫天飞舞呢?

而且我们知道,异步callback是非常难以调试和跟踪的,你经常不知道问题出在哪里,而且很多时候异步问题是很难重现的。


如果异步编程能像同步编程一样清晰,一样易于调试,那该多好!


2005年年底的时候,我突发奇想,借鉴Java 1.5新增的Future类,揉合JavaScript的特性,创造了AJAX的Future编程模式,使得可以用同步编程的编码方式进行异步编程,并可在同步和异步下自由切换,在同步状态下进行业务测试,保证业务实现的正确性,然后切换到异步,进行网络和负载的测试!

在以后的数天里,我会将这种方法与大家共享,也希望大家能共同验证这一模式的可行性!
分享到:
评论
12 楼 hax 2007-06-01  
birdjavaeye 写道
看来不是关注于XHR部分,而是某些计算方面的。不过就许多项目来说,除了XHR和界面事件回调,基本都是同步的了,类似future模式作用有多大呢


非也,本身许多东西是同步的,但是它依赖异步的结果,导致本来可同步执行的内容必须callback。请考虑我前述的例子。
11 楼 birdjavaeye 2007-06-01  
看来不是关注于XHR部分,而是某些计算方面的。不过就许多项目来说,除了XHR和界面事件回调,基本都是同步的了,类似future模式作用有多大呢
10 楼 笨笨狗 2007-06-01  
不要掉人胃口啦,早点放出来,让大家一起研究研究,呵呵
9 楼 hax 2007-06-01  
cherami 写道
似乎你前面和后面不搭边啊

前面的例子说明的似乎是xslt太多,以及js难于调试
这些和AJAX的异步似乎关系不大,AJAX中易于出错的应该是callback的处理部分吧,这个和异步有什么关系呢?换成同步的,出错的一样是你callback部分吧?



我说的问题大体上是这样,由于业务比较复杂,所以异步的callback增多,并存在多级互相依赖的关系(例如一个计算总市值的方法实际上要等待多个xml的异步调用结束后才能执行),这实际上导致异步编程模式影响了业务代码的书写、阅读、测试和维护
8 楼 hax 2007-06-01  
birdjavaeye 写道
j5中一般用Future接口的get方法来等待并取得执行结果
但在js中,任何一个函数执行期间,整个浏览器都会没有响应。
对于执行时间短的,感觉不出来,而如果像Future那种方式来等待网络访问结果,那用户体验就会很差。




所以是借鉴,而不是照搬,呵呵。
7 楼 birdjavaeye 2007-05-31  
j5中一般用Future接口的get方法来等待并取得执行结果
但在js中,任何一个函数执行期间,整个浏览器都会没有响应。
对于执行时间短的,感觉不出来,而如果像Future那种方式来等待网络访问结果,那用户体验就会很差。


6 楼 sp42 2007-05-31  
小Tips:异步变同步, 第一件事可能就是改名 Ajax的A不能再用啦
5 楼 cherami 2007-05-31  
PS:兄弟,过去都快两年了,你才开始预告啊,我们要再等多长时间?
4 楼 cherami 2007-05-31  
似乎你前面和后面不搭边啊

前面的例子说明的似乎是xslt太多,以及js难于调试
这些和AJAX的异步似乎关系不大,AJAX中易于出错的应该是callback的处理部分吧,这个和异步有什么关系呢?换成同步的,出错的一样是你callback部分吧?
3 楼 hax 2007-05-31  
sp42 写道
所谓的Comet服务器???


什么是Comet服务器? :-<

我的这个模式是为JavaScript准备的,是纯JS的,与服务器端没有关系。
2 楼 sp42 2007-05-31  
2005年能想到这个IDEA,那么LZ也算是比较超前的人~
赞一个!
期待中
1 楼 sp42 2007-05-31  
所谓的Comet服务器???

相关推荐

    ASP.NET AJAX程序设计——第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit 源代码

    这部分内容不需要读者有任何的客户端开发知识,只要在Visual Stuio中轻松拖放即可实现强大的客户端Ajax功能,例如局部页面更新、异步回送、拖放、动画等,非常适合为现有的ASP.NET 2.0应用程序添加少量的Ajax特性,...

    对立统一——异步时钟同步化

    ### 对立统一——异步时钟同步化 #### 一、什么是对立统一 在讨论异步时钟同步化之前,我们首先理解“对立统一”的概念。在FPGA设计领域,“对立统一”主要指的是系统中不同频率时钟信号之间存在的矛盾与协调。...

    AJAX同步或异步流程图

    AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换...理解并熟练运用AJAX的同步和异步模式,是提升Web应用性能和交互性的重要手段。

    Nodejs让异步变成同步的方法

    具体来讲,co库支持以下特性来实现异步变同步的效果: 1. 生成器(Generators):生成器是一种特殊的迭代器,可以暂停函数的执行并返回一个中间结果,稍后再从中断的地方继续执行。生成器函数通过function*关键字...

    Ajax异步与同步方法封装的js文件

    调用方法:1 将下载好的Ajax js文件引用到页面 代码如下:&lt;script src &quot; js MyAjax js&quot; type &quot;text javascript&quot;&gt;&lt; script&gt; 2 调用方法:(1)异步: MyAjax &quot; 要调用的方法...

    ASP.NET源码——Ajax之用户注册实例.zip

    例如,使用$.ajax()或$.post()方法发送异步请求,获取服务器端的响应,并根据返回的结果更新DOM元素。 4. **Web服务或API**:后端可能提供了一个Web服务(如ASMX或Web API),用于接收和处理Ajax请求,进行用户注册...

    上传控件——ajaxUpLoader

    "上传控件——ajaxUpLoader"就是一个专为此目的设计的工具,它提供了高效且用户体验良好的上传功能。以下是对这个控件及其相关技术的详细解释。 1. **Ajax上传**: Ajax(异步JavaScript和XML)技术允许网页在不...

    proe二次开发同步异步两种模式的区别

    * 同步模式有多进程模式和动态链接库模式两个子模式,异步模式有简单异步模式和完全异步模式两个子模式。 在 PROE 二次开发中,选择合适的模式取决于具体的应用场景和开发需求。了解同步模式和异步模式的区别可以...

    13_JavaWeb——AJAX配套资源

    此资源与我的博客13_JavaWeb——AJAX中的两个案例对应,其中Demo5使用AJAX异步处理页面实现对用户输入的实时校验,Demo6使用Axios+JSON完成对品牌列表的展示和添加,取代了先前的JSP。希望有所帮助

    AJAX_技术总结_设计模式

    - **异步通信**:AJAX 的关键特性,允许在不阻塞用户界面的情况下进行数据交换。 ### 2. AJAX 请求过程 1. **创建对象**:使用 JavaScript 创建 XMLHttpRequest 对象。 2. **初始化请求**:设置请求类型(GET 或 ...

    jQuery-ajax-用户名异步请求

    在Web开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理以及Ajax交互。本主题聚焦于jQuery中的Ajax功能,特别是如何利用它进行异步用户名验证。Ajax,即Asynchronous JavaScript and ...

    谷歌浏览器插件—— Ajax Interceptor

    总结来说,Ajax Interceptor 是一个方便的Chrome插件,它利用AJAX的异步特性,为开发者提供了强大的控制和调试能力。通过理解和运用这个工具,开发者可以更高效地进行前端开发,尤其是在处理复杂的API交互时。同时,...

    ASP.NET 2.0 Ajax程序设计——第II卷:客户端Microsoft AJAX Library与异步通信层源代码

    本卷侧重分析ASP.NET AJAX框架的客户端部分,包括对JavaScript 在面向对象、DOM 操作方面的扩展、ASP.NET AJAX 客户端组件、ASP.NET AJAX XML脚本等,还介绍了ASP.NET AJAX 框架为开发者在客户端用JavaScript 与...

    学习ajax的文档——ajax基础文档

    **Ajax(Asynchronous JavaScript and XML)**是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。这个技术由JavaScript实现,通常与XML数据格式配合使用,但如今更常见的是JSON,因为JSON格式的数据处理...

    ASP.NET源码——ajax 插入 删除功能.zip

    此压缩包"ASP.NET源码——ajax 插入 删除功能.zip"提供了一套示例代码,演示了如何在ASP.NET应用中使用AJAX(Asynchronous JavaScript and XML)技术来实现数据的无刷新插入和删除功能。AJAX允许在不重新加载整个...

    J2EE——Ajax——dwr——配置文件

    在J2Direct Web Remoting (DWR) 是一个强大的开源库,它使得在J2EE应用程序中实现Ajax(Asynchronous JavaScript and XML)功能变得更加简单。Ajax允许Web应用程序在不刷新整个页面的情况下与服务器进行异步通信,极...

    异步校验jquery-ajax

    本工程有两种ajax异步校验注册时输入的username是否与数据库中的值重复,通过mybatis实现数据库,通过servlet或者struts2实现控制层,通过ajax,jquery,json,实现异步校验

    三相异步电机CAD系统——哈工大计算程序

    《三相异步电机CAD系统——哈工大计算程序》是一款专为电机设计者打造的专业软件,由哈尔滨工业大学开发,旨在提高三相异步电机的设计效率和精度。这款软件集成了丰富的理论知识与实践经验,是电机工程领域的得力...

    Ajax异步传输数据(1)——页面格式

    **Ajax异步传输数据(1)——页面格式** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的核心是JavaScript,利用XMLHttpRequest对象与服务器进行通信,...

Global site tag (gtag.js) - Google Analytics