论坛首页 Web前端技术论坛

不要乱用ajax中异步操作

浏览 40470 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-09-17  

Ajax(Asynchronous JavaScript and XML)

    我没有能力给Ajax下定义,但看到的所谓的ajax应用却让我很是困惑。就上面的这个名词,Asynchronous放在了首位,我知道不该咬文嚼字,这里我只想说说,异步操作我们真的能正确的使用吗?
一、异步由来
    XMLHttpRequest这个对象的open方法有个参数可以确定这次请求是同步还是异步操作,如果是同步操作,相当于函数调用一样,没什么问题。如果选择异步,那么必须监听该对象的变化状态来得到结果。
     一般编程都是同步模型,例如调用一个方法,如果这个方法需要很长时间,也的等,一般也不会出现什么问题。异步模型偶只在JMS中用过点点,你发个消息,不用等消息发送成功与否,程序继续执行(可能消息接受者没收到,可能以后会收到)。这样看来异步操作也有用,但应该是在特定情况下。
二、ajax框架的不负责任
     以prorotype.js为首,Ajax.Request 对同步(synchronous)请求的支持一直有bug(现在改了),估计作者眼中,ajax都是异步操作,但我们使用者呢,无形中给我们这种思想。
     dwr,典型异步操作,让我们自己维护callback,代码丑陋,难于控制,还可能会出问题。http://agile.com/read.php?tid=232
     dojo.io/qooxdoo.......
      我不知道这些框架实现者中,ajax都是异步操作吗?下面我就来说说看!
三、案例分析
1、google maps
     ajax御用例子,整个应用确实是异步的,异步的请求图片。请注意,这里的异步形成是根据<img>对象可以”自动“加载图片来实现的,并且也没有回调方法。
     如果你说google maps之类的应用使用ajax的异步操作,我觉得不是很准确。
2、google mail
     不停的点击收件箱,可以看到页面右上角那个 正在加载.......
    我估计用的是异步操作,但这里我看不错异步操作能带来什么好处,但服务器的压力是加大很多。
  你也可以点击收件箱,然后F5。看到有很多请求被别的请求”覆盖了“。(可能f5不是很合适)
  也可以乱点,相信你很快就和我一样,gmail出现异常了,不让访问了。

  我不认为web mail中的有些操作适合异步操作。
3、google suggest
       我认为它是很适合异步操作的。为什么呢,因为这里需要”覆盖请求“。例如我期望得到 Chinese。我输入 chi 这时候可能就向服务器发送请求了,可还没有返回,也有可能已经返回一些建议了。我还会输入下去,也可能输错,删除几个单词。(这样说下去就复杂了) 但无论怎么样,最后一个请求的结果是用户希望看到的,前面的所有请求只是可能的最终结果,所以我觉得web”请求覆盖“是异步操作的主要标志之一。
四、从软件应用类型分析
  ajax in action让偶接触的软件可用性。[emot]grin[/emot]
      transient(瞬态的)/sovereign(独占的) 的使用方式。从字面上相信都清楚了。这里我不想详细说了,大家可以看看ajax in action体会一下,讲了也不多,但能启发你。
  是否异步操作与它们有很大关系。
五、怎么样确定异步还是同步
  如果你和我同样的考虑以后,相信我们面对的太多应用,或者用例都应该是同步操作(当然异步也可以实现)。如果你习惯了用ajax的异步通信,那赶快改过来吧,同步模型会让你的软件更稳定,开发更简单。
  相信我,大家的很多时候都滥用的异步操作!
  当然异步带来的好处也很多,给软件的可用性,用户体验提升是巨大的,可困难也是巨大的。
六、总结
  我们大部分的web应用都是同步操作,也习惯了点击触发一个事件,等待它完成的习惯。
  异步操作能带给我们很多想象之外的效果,但绝对不是代替同步操作。
   发表时间:2006-09-18  
同意。
异步不可滥用。有的场景的确是要同步调用,如果系统慢的话就一定要block user的。

异步的好处是多线程处理,可以不影响主线程即界面的继续操作。c/s应用也不能随便使用多线程的异步操啊,类比一下,b/s应用亦然。
0 请登录后投票
   发表时间:2006-10-09  
楼主说的是有一定道理的,个人认为某个页面的局部数据通过异步处理,还是不错的。
大量应用于整个网站,并不是太好。就象QQ相册用异步去取图片,我请求一次,还是要等,等到图片刷出来。这样和同步请求,去取图片有什么区别啊!
0 请登录后投票
   发表时间:2006-10-09  
异步操作,个人使用很大一部分是解决以往页面参数保留的一些问题,不用异步之前都是要页面的所有参数值都再传一次给页面。
如,同一页面的增加,修改操作(不需要页面跳转),这时候用异步可以不需要考虑页面参数保留,加快了请求响应速度。
0 请登录后投票
   发表时间:2006-10-12  
过犹不及,我们的项目中遇到了很严重的问题,所以现在已经花了大量精力进行了重够,减少所有不必要的所谓ajax
0 请登录后投票
   发表时间:2006-10-20  
异步现在最明显的好处,就是带来一个loading 信息.
0 请登录后投票
   发表时间:2006-10-20  
严重支持,一直对这个问题很困惑!
个人认为90%以上的功能都应该采用同步操作,只有很少很少一部分需求需要异步,比如等待时间比较长的地方加个loading。
0 请登录后投票
   发表时间:2006-10-23  
我想能用异步的就用异步,这样效率会快!!
我们在项目中大多都用同步操作,因为下一步操作 用到的元素依赖于上一步完成后才有!
只有在一个页面中两个局部都要刷新,并且不相互牵连才会用异部操作!
0 请登录后投票
   发表时间:2006-10-24  
所见略同!

同步操作是最简单的,一般情况下也是足够的。
而异步操作应该当作一种高级的方式。处理起来也更加复杂。


在我写的类库中,我都设置为默认同步。
我们应该做的就是让简单的常用的事情更简单,让复杂的事情可实现既是。


对于Ajax这个名词,一向反感,不就一个ActiveX控件一堆通行了多少年的标准吗,炒作成这样。
旧药装新瓶,实在有点恶心。
0 请登录后投票
   发表时间:2006-10-24  
zrweng 写道
异步操作,个人使用很大一部分是解决以往页面参数保留的一些问题,不用异步之前都是要页面的所有参数值都再传一次给页面。
如,同一页面的增加,修改操作(不需要页面跳转),这时候用异步可以不需要考虑页面参数保留,加快了请求响应速度。


这个与异步有直接关系吗?
页面局部更新的问题。同步异步执行并没什么明显差异吧。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics