Ajax——优缺点、交互模型、跨域问题以及对同步异步的区分

来源:互联网 发布:今日头条数据缓存策略 编辑:程序博客网 时间:2024/06/14 06:49

一、Ajax优缺点

  • 优点:

1、最大的一点是页面无刷新,用户的体验非常好。

2、使用异步方式与服务器通信,具有更加迅速的响应能力。

3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

  • 缺点

1、ajax不支持浏览器back按钮。

       用AJAX做交互的时候,是通过js+xmlhttp来获取其他页面信息,对于浏览用户来说,是一个隐性的UE,感觉不到浏览器地址栏的URL的变化,对浏览器来说,地址栏的URL没发变化,产生不了HISTORY。

       不是说在用AJAX做交互的时候,BACK按钮的问题就解决不了,对于AJAX应用很成熟的网站比如google等,这些都已经解决。

       用过Gmail的知道,Gmail下面采用的ajax技术解决了这个问题,在Gmail下面是可以后退的,但是,它也并不能改变ajax的机制,即用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)

       但是,虽然说这个问题是可以解决的,但是它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。

2、安全问题 AJAX暴露了与服务器交互的细节。

        ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于credentials的安全漏洞等。

3、对搜索引擎的支持比较弱。

4、破坏了程序的异常机制。

        像ajax.dll,ajaxpro.dll这些ajax框架是会破坏程序的异常机制的。

5、不容易调试。

       比如说违背了url和资源定位的初衷。例如,我给你一个url地址,如果采用了ajax技术,也许你在该url地址下面看到的和我在这个url地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。

6、一些手持设备(如手机、PDA等)现在还不能很好的支持ajax。

       比如说我们在手机的浏览器上打开采用ajax技术的网站时,它目前是不支持的。

二、Ajax的交互模型

  • 用户发出异步请求;  
  • 创建 XMLHttpRequest 对象;  
  • 告诉 XMLHttpRequest 对象哪个函数会处理XMLHttpRequest 对象状态的改变,为此要把对象的onReadyStateChange 属性设置为响应该事件的 JavaScript 函数的引用;
  • 创建请求,用 open 方法指定是 get 还是 post ,是否异步, url 地址;  
  • 发送请求, send 方法  
  • 接收结果并分析  
  • 实现刷新

三、Ajax的跨域问题

              默认情况下,XHR对象只能访问与包含它的页面位于同一个域中的资源,这种安全策略可以预防某些恶意行为。
        实现合理的跨域请求对开发某些浏览器应用程序至关重要。
        主要有以下几种方法:
  • CORS,跨域资源共享,定义了必须在访问跨域资源时,浏览览器与服务器该如何沟通,基本思想是,使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否成功。注意,请求和响应都不包含cookie信息。IE8通过XDomainRequest对象支持CORS,其它浏览器通过XHR对象原生支持CORS。
  • 图像Ping,多用于动态创建图像。该方式与服务器进行简单、单向的跨域通信。
       它有两个主要缺点,一是只能发送GET请求,二是无法访问服务器的响应文本。
  • JSONP,填充式JSON,应用JSON的一种新方法。

       它是被包含在函数调用中的JSON,例如,

             callback({“name”: “abc”});

       JSONP由两部分组成,毁掉函数和数据。毁掉函数是当响应到来时应该在页面中调用的函数。数据时传入毁掉函数中的JSON数据。
  • Comet,是一种服务器向页面推送数据的技术。两种方式可实现,长轮询和流。
  • SSE,服务器发送事件。SSE API用于创建到服务器的单向连接,服务器通过这个连接可以发送任意数量的数据。
  • Web Sockets API


四、同步与异步的区别

       同步:脚本会停留并等待服务器发送回复然后再继续

       异步:脚本允许页面继续其进程并处理可能的回复

       AJAX使用的是异步,传统的Web是使用的同步。 同步更新是需要对整个页面进行更新,并且以新页面的形式显示出来。因为服务器每次都会返回一个新的页面,所以传统的web应用有可能很慢而且用户交互不友好。


\


        异步更新是后台和服务器进行少量数据交换,即不重新加载整个网页就可以对网页的某部分进行更新。而AJAX减少了用户的等待时间。展示给用户的还是同一个页面,用户感觉页面刷新,也看不到到Javascript后台进行的发送请求和接受响应。


\

部分内容参考下面网页内容:
http://www.cnblogs.com/ustbwuyi/archive/2007/02/08/645061.html#2215165
http://www.2cto.com/kf/201504/395028.html


0 1