AJAX都有哪些有点和缺点


Posted in 面试题 onNovember 03, 2012
传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。
与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于 XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像 DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。
对应用Ajax最主要的批评就是,它可能破坏浏览器后退按钮的正常行为[4]。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,当中大多数都是在用户单击后退按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)
一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。
进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应 [5],没有恰当的预读数据 [6],或者对XMLHttpRequest的不恰当处理[7],都会使用户感到延迟,这是用户不欲看到的,也是他们无法理解的[8]。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。
一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax;
用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是让人头痛的事;
Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;
对串流媒体的支持没有FLASH、Java Applet好;

Tags in this post...

面试题 相关文章推荐
编写用C语言实现的求n阶阶乘问题的递归算法
Oct 21 面试题
汇智创新科技发展有限公司
Dec 06 面试题
DBA的职责都有哪些
May 16 面试题
杭州-DOTNET笔试题集
Sep 25 面试题
如何判断计算机可能已经中马
Mar 22 面试题
常见的软件开发流程有哪些
Nov 14 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
Nov 23 面试题
介绍一下MYSQL常用的优化技巧
Oct 25 面试题
Overload和Override的区别
Sep 02 面试题
编程输出如下图形
Nov 24 面试题
深圳茁壮笔试题
May 28 面试题
这76道Java面试题及答案,祝你能成功通过面试
Apr 16 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
Nov 17 #面试题
什么是Remote Module
Jun 10 #面试题
AJAX的全称是什么
Nov 06 #面试题
Prototype是怎么扩展DOM的
Oct 01 #面试题
GWT都有什么特性
Dec 02 #面试题
JavaScript获取当前url根目录(路径)
Feb 19 #面试题
ajax是什么及其工作原理
Feb 08 #面试题
You might like
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
php提取微信账单的有效信息
2018/10/01 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
理解javascript闭包
2015/12/15 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
js实现小星星游戏
2020/03/23 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python 中@property的用法详解
2020/01/15 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
愚人节活动策划方案
2014/03/11 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
2014年采购员工作总结
2014/11/18 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server