在聊到Ajax的时候,需要大家清楚的是·Ajax是什么。AJax也叫Asynchronous JavaScript and XML,即异步的JavaScript 和XML。其次需要清楚的Ajax并不是一门新的语言或技术,而是JavaScript ,css,Dom,xml等多种已有的技术的组合,可以实现客户端的异步请求的操作从而实现在不刷新页面的情况下与服务器端进行数据层间的数据交互,减少了用户的等待时间,减轻了服务器端和带宽的负担,例如Google地图和百度地图中都有用到Ajax
在传统的web应用模式中,每发送一次http请求到web服务器端,经过处理后,返回的是一个html+css的格式|
使用了Ajax应用模式中,页面中用户的操作将通过Ajax引擎与服务器端进行通信,经web服务器端处理后返回的是一个html+字符串数据,就是说通过回调函数返回的data是一个字符串,这个字符串可以是json格式也可以是其他格式,取决于你定义的是什么
使用Ajax的优点:
1,首先是降低网络的流量,因为是局部刷新
2,把一部分原本是有服务器承担的工作转移到客户端,利用客户端闲置的资源进行一个处理,减轻了服务器和带宽的负担,节约了空间和成本
3,使用Ajax可以实现局部刷新的效果而不是页面刷新,这样的话就将服务器的角色由传输内容变成传输数据,而这个传输的数据的格式可以是xml格式,也可以是纯文本格式、
4,通过Ajax的核心对象XMLHttpRequest发送请求来进行客户端和服务端之间的一个交互,通过XMLHttprequest发送请求后,通过javascript来操作DOM从而更新页面中的数据
使用Ajax的缺点:
1,通过XMLhttpRequesth函数来获取数据,在使用Ajax进行跨域请求的时候会出现跨域的安全问题,当然在后面可以通过jsonp来解决浏览器同源策略问题,但是在没有jsonp的时候会存在这样的问题
2,由于ajax是通过javascript来操作dom,进行对页面中的数据进行一个更新的,这样一来的话就会导致javascript过多,不易于维护
3,给搜索引擎带来困难
4,ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于credentials的安全漏洞等。
安全问题:
当web应用程序运行javascript脚本的时候,用户允许任何人编写的javascript代码运行在自己的计算机上,这就为移动代码自动跨域网络来运行提供了方便条件,为了解决这潜在的问题,浏览器厂商都会提供一个sandbox(沙箱),沙箱是一个只能访问很少计算机资源的密闭环境,从而使得ajax应用不能读取或写入本地文件系统,从而提高了客户端的javascript安全性
客户端调用远程资源的一个安全问题:
虽然javascript允许客户端完成部分服务器端的工作,并且可以通过javascript来检查用户的权限,但是通过客户端脚本来控制权限并不可取,一些解密高手可以很轻松的绕开javascript权限检查直接访问业务逻辑组件,从而给网站带来安全的问题,通常情况下,在ajax应用中,所有的ajax请求都应该发送到控制器,有控制器来判断调用者是否有访问资源的权限
性能问题:
尽量使用局部变量而不使用全局变量
优化for循环
尽量少使用eval()方法,每次使用eval()都会消耗大量的时间
尽量减少“”。“”号操作符的使用
浏览器兼容问题:
readstatus:
0:未初始化,也就是没有调用open方法
1:正在加载
2,已加载
3,交互中
4,已完成”
关于同步和异步
异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。
具体来说,异步传输是将比特分成小组来进行传送。一般每个小组是一个8位字符,在每个小组的头部和尾部都有一个开始位和一个停止位,它在传送过程中接收方和发送方的时钟不要求一致,也就是说,发送方可以在任何时刻发送这些小组,而接收方并不知道它什么时候到达。一个最明显的例子就是计算机键盘和主机的通信,按下一个键的同时向主机发送一个8比特位的ASCII代 码,键盘可以在任何时刻发送代码,这取决于用户的输入速度,内部的硬件必须能够在任何时刻接收一个键入的字符。这是一个典型的异步传输过程。异步传输存在 一个潜在的问题,即接收方并不知道数据会在什么时候到达。在它检测到数据并做出响应之前,第一个比特已经过去了。这就像有人出乎意料地从后面走上来跟你说 话,而你没来得及反应过来,漏掉了最前面的几个词。因此,每次异步传输的信息都以一个起始位开头,它通知接收方数据已经到达了,这就给了接收方响应、接收 和缓存数据比特的时间;在传输结束时,一个停止位表示该次传输信息的终止。按照惯例,空闲(没有传送数据)的线路实际携带着一个代表二进制1的信号。步传输的开始位使信号变成0,其他的比特位使信号随传输的数据信息而变化。最后,停止位使信号重新变回1,该信号一直保持到下一个开始位到达。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,同时需要在8比特位的前面加一个起始位,后面一个停止位。
同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧。
数据帧的第一部分包含一组同步字符,它是一个独特的比特组合,类似于前面提到的起始位,用于通知接收方一个帧已经到达,但它同时还能确保接收方的采样速度和比特的到达速度保持一致,使收发双方进入同步。
帧的最后一部分是一个帧结束标记。与同步字符一样,它也是一个独特的比特串,类似于前面提到的停止位,用于表示在下一帧开始之前没有别的即将到达的数据了。
同步传输通常要比异步传输快速得多。接收方不必对每个字符进行开始和停止的操作。一旦检测到帧同步字符,它就在接下来的数据到达时接收它们。另外,同步传输的开销也比较少。例如,一个典型的帧可能有500字节(即4000比特)的数据,其中可能只包含100比特的开销。这时,增加的比特位使传输的比特总数增加2.5%,这与异步传输中25 %的增值要小得多。随着数据帧中实际数据比特位的增加,开销比特所占的百分比将相应地减少。但是,数据比特位越长,缓存数据所需要的缓冲区也越大,这就限制了一个帧的大小。另外,帧越大,它占据传输媒体的连续时间也越长。在极端的情况下,这将导致其他用户等得太久。