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...

面试题 相关文章推荐
Java面试题及答案
Sep 08 面试题
写出程序把一个链表中的接点顺序倒排
Apr 28 面试题
C++的几个面试题附答案
Aug 03 面试题
请写出 float x 与"零值"比较的 if 语句
Jan 04 面试题
经典c++面试题二
Aug 14 面试题
杭州信雅达系统.NET工程师面试试题
Feb 08 面试题
Internet体系结构
Dec 21 面试题
接口可以包含哪些成员
Sep 30 面试题
常用UNIX 命令(Linux的常用命令)
Dec 26 面试题
北京麒麟网信息技术有限公司网络游戏测试面试题
Sep 28 面试题
关键字throw与throws的用法差异
Nov 22 面试题
Java面试题冲刺第十七天--基础篇3
Aug 07 面试题
不同浏览器创建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的宝库目录--PEAR
2006/10/09 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
Vue2.0生命周期的理解
2018/08/20 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Python卸载模块的方法汇总
2016/06/07 Python
关于反爬虫的一些简单总结
2017/12/13 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
python实现桌面气泡提示功能
2019/07/29 Python
wxPython色环电阻计算器
2019/11/18 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
我未来的职业规划范文
2014/01/11 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
优秀员工推荐信
2014/05/10 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
python playwrigh框架入门安装使用
2022/07/23 Python