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

面试题 相关文章推荐
为什么要优先使用同步代码块而不是同步方法?
Jan 30 面试题
垃圾回收的优点和原理。并考虑2种回收机制
Oct 16 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 面试题
编写函数,将一个3*3矩阵转置
Oct 09 面试题
请写出char *p与"零值"比较的if语句
Sep 24 面试题
光声世纪笔试题目
Aug 25 面试题
C# Debug和Testing相关面试题
Oct 25 面试题
山海经纬软件测试笔试题和面试题
Apr 02 面试题
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
Nov 04 面试题
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
Nov 18 面试题
Java面试题:请说出如下代码的输出结果
Apr 22 面试题
介绍一些UNIX常用简单命令
Nov 11 面试题
不同浏览器创建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比你想象的好得多
2014/11/27 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
lib.utf.js
2007/08/21 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
服装厂厂长职责
2013/12/16 职场文书
工程招投标邀请书
2014/01/26 职场文书
大班开学家长寄语
2014/04/04 职场文书
小学安全汇报材料
2014/08/14 职场文书
高二语文教学反思
2016/02/16 职场文书
二年级作文之动物作文
2019/11/13 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server