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

面试题 相关文章推荐
PHP如何防止SQL注入
May 03 面试题
PHP如何自定义函数
Sep 16 面试题
一套VC试题
Jan 23 面试题
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
May 09 面试题
凌阳科技股份有限公司C++程序员面试题笔试题
Nov 20 面试题
什么是触发器(trigger)? 触发器有什么作用?
Sep 18 面试题
STP的判定过程
Oct 01 面试题
Linux文件系统类型
Sep 16 面试题
Linux中如何用命令创建目录
Jan 12 面试题
EJB2和EJB3在架构上的不同点
Sep 29 面试题
Java的类与C++的类有什么不同
Jan 18 面试题
不同浏览器创建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
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
php链表用法实例分析
2015/07/09 PHP
php实现的操作excel类详解
2016/01/15 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
python输出pdf文档的实例
2020/02/13 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
三好学生个人先进事迹材料
2014/05/17 职场文书
贷款委托书
2014/08/01 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
php去除数组中为0的元素的实例分析
2021/11/17 PHP
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏