防范AJAX风险
作者:译自《Computerworld》
由于浏览器和用户都在不断变化,JavaScript、CSS和XHR引擎出现的变化都会给AJAX应用带来微妙的影响。AJAX至少有三大方面的风险: 技术风险、文化/政治风险和营销风险。
技术风险直接涉及软件的设计、开发和维护,包括安全、浏览器功能、最后期限、开发及硬件成本、开发人员的技能及其他这类风险。文化/政治风险主要围绕最终用户的体验、态度和期望以及这一切与软件之间的关系。营销风险涉及成功执行商业模式,从而带来销售、捐赠、品牌认可、新账户注册等等。
技术风险
不像另外两种风险,技术风险实际上会导致项目无法完成。在评估构建AJAX应用的第三方框架时,这种风险来源至关重要,因为第三方框架往往缺乏技术上的控制。一些研究表明,企业50%的软件项目从来没有投入实际使用。
● 影响范围
有时候我们为大批人编写软件时,需要着眼于最基本的功能来构建。用户往往使用许多不同的浏览器和操作系统,尽管有的浏览器使用者很少,例如Opera的市场份额只有1%左右,但是Web应用也应该兼容这部分用户。这是技术风险的一个例子,这种应用范围与应用丰富程度之间的取舍恐怕是Web应用最主要的日常问题。
Web应用的基本问题就是,不同的浏览器对页面的解释各不相同。Firefox中的简单操作到了IE浏览器中却可能异常困难。风险就在于如何成功满足项目要求,同时应用到我们的所有目标浏览器和操作系统中。
应用的丰富程度与可以使用应用的用户数量(由于客户端平台不兼容)之间通常需要做出取舍。这种风险的严重程度取决于下面几个因素:
1. 应用是公共的还是专有的(防火墙后面)。公共应用面向的用户群本身要广泛得多。企业应用往往具有优势,原因是与普通大众相比,更容易让企业用户坚持使用一两种浏览器。
2. 目标用户群偏爱的浏览器和操作系统的分类情况,也就是说有多少员工或者客户在使用Safari Mac、Firefox Mac、Firefox PC和Internet Explorer?
3. 与一部用户不兼容会给营销带来的潜在影响。要问自己的一个问题是: “要是我们不支持Safari,那会失去多少客户?从公关角度和成本效益角度来看,这么做可以接受吗?”
4. 哪些用户在多大程度上愿意改用另一种浏览器或者操作系统?
● 浏览器功能
目前很多有关AJAX的问题都还属于未知领域。浏览器开发商似乎刚开始明白开发人员对自己有什么样的要求; 构建跨平台的解决方案时,一些错误或遗漏有时会带来出乎意料的障碍。例如Opera和Safari长期缺少对XSLT的支持,Safari存在锚标签书签问题。IE 6和7在放置DHTML元素方面存在明显错误,有时需要很复杂的变通办法。IE中效果很好的一些方法到了Firefox却慢得要命,特别是涉及XSLT时。
这种风险在于,开发一项功能需要无法预测的一段时间,或者结果表明根本不可能实现。显然,浏览器模拟真正类似桌面的软件还有一定距离,差别到底在哪里还有待探究。所以,AJAX开发就往往成了另辟蹊径想出变通办法的一个过程。开发人员发现自己沿着一条路去解决问题,认识到行不通后,只好回过头去,重新寻找出路。
● 维护
JavaScript、DHTML和级联样式表(CSS)代码往往会变得复杂、难以维护。一个难题就是,许多开发人员没有使用良好的集成开发环境(IDE)来编写及测试代码。另一个难题是,出于性能上的考虑,需要在脚本中采用需慎重对待的优化技术。这些因素导致了意大利面条式代码(spaghetti code,这种代码的控制缺乏条理),而且长期维护成本高于用更大程度依赖服务器端处理的传统架构编写的应用。风险主要在于,在不断变化的技术环境下,如何长期迅速、有效地维护应用。
浏览器开发商随意改变浏览器运行及解释CSS和JavaScript的方式,这更是加大了维护风险。微软或者Mozilla偶尔会堵住某个安全漏洞,或者“修补”某个CSS问题,从而打乱了某种技术或者方案的计划。这方面的一个例子是Mozilla对剪贴板的使用就至少有过一次变动。另一个是IE 7中对DHTML盒模型(box model)的变动。随着微软实现更符合标准的CSS,基于较旧、错误较多的模式而构建的许多Web应用会受到破坏。
风险在于,由于浏览器出现的变动,企业必须迅速地频频采取对策,处理突如其来、出乎意料、成本高昂的维护工作,而难以维护的意大利面条式代码更是加大了困难。
● 向前兼容
向前兼容涉及维护风险。随着新的浏览器和操作系统登台亮相,AJAX应用的有些部分可能要改写,以适应布局引擎、CSS解释器以及JavaScript、XMLHttp和DHTML等底层机制出现的变化。在过去,Opera和Safari等早期阶段的浏览器一直很差,因为它们随意改变CSS把元素放在页面上的方式,IE7也是这样。这会影响成本的控制,因为这本身是无法预测的。相比之下,向后兼容的工作可以进行测试、得到比较准确的估计。不过值得一提的是,开发商总是提供新版本浏览器的公共测试版。
● 第三方工具的支持及废弃
虽然采用Dojo或者Script.aculo.us等第三方工具可以“免费”为应用添加诸多功能,但同时也会带来固有风险。而且,由于第三方工具的黑盒子性质即未知性,几乎不可能为它们排除故障。美国一家电子商务公司采用Dojo后,只好请要价不菲的顾问乘飞机过来,解决这个框架存在的问题。故障得到了解决,结果查明罪魁祸首是这个框架,幸好这个项目还没有带来大笔的意外费用。
如果框架没有以用户希望的速度及时维护,或者在将来的开发版本中未得到支持,废弃框架也会在将来带来问题。如果出现打乱计划的情况,譬如浏览器或者操作系统升级,这个问题就会令人特别头痛。添加特性或者改进功能能力需要请来深入了解相应工具的开发人员。
文化和政治风险
● 可培训性
在公共互联网上,应用使用者一般是不可培训的,因为他们一开始与开发商的关系就不牢固。用户群的可培训性取决于这种关系的性质、他们自己要学习的动机、所需培训的深度,当然还有注意力集中的时间长度。Web应用方面的培训包括: 现场演示、嵌入式Flash影片教程或者说明手册。在面向消费者的应用中,切换成本一般很低,用户也没有多大动机去适应一种新的界面或者工作流程。
在企业内部,我们对自己用户的影响力一般大于企业外部对大众消费者的影响力。换句话说,我们促使内部用户学习一种新界面的能力更强。话虽如此,也不能低估促使用户接受的重要性。最终用户的抵触是软件项目失败的主要原因之一。
● 法律
Web可访问性这个问题把法律环境与Web应用设计的技术世界联系在一起。在美国,《康复法案》的第508条规定了政府组织如何构建软件、限制富互联网应用(RIA)的使用。有些公司也许认为: 因为自己属于私营部门,不会遭到诉讼。实际上,已有人根据《美国残疾人法案》(ADA)以网站无法访问为由起诉私营公司,譬如2006年轰动一时的Target公司网站卷入纠纷的案例。随着RIA变得习以为常,可访问性会越来越成为关注的话题。幸好,一些重要组织正试图通过更新立法和软件解决方案来解决这个问题。
1.第508条
《康复法案》的第508条要求美国政府组织使用的计算机软硬件符合明确定义的可访问性标准。虽然第508条并不要求私营公司遵守这些标准,但它确实要求联邦机构选用最符合标准的厂商,从而提供了强烈动机。
2.《电信法案》
不像第508条,《电信法案》的第255条确实适用于私营部门。它规定,只要能够“容易实现”,电信产品和服务必须可访问——这是笼统而广泛的要求。
3.ADA
《美国残疾人法案》(ADA)基本上要求提供公共服务和就业方面要做到可访问性。ADA赋予员工要求整个企业提供“合理设施”的权利,包括内部网站、软件和硬件。ADA还适用于组织或公司的网站,这让人们对突然加大的法律风险关注起来。
营销风险
互联网营销造就了一批新的营销商: 他们除了要明白目标用户群以及用户的文化和技术特点外,还要了解搜索引擎优化和网站的货币化。这里提到的其他所有风险最终都成为了营销风险,因为它们会影响组织在网上开展业务的能力。
● 搜索引擎的可访问性
许多组织高度依赖搜索引擎排名来开展业务。对排名可能会有负面影响的任何行为都被认为是无法接受的。许多营销商担心: 企业网站上使用AJAX可能意味着,网页再也不会出现在搜索引擎结果页面中。这确实是一个重要的考虑因素。
我们在比较详细地分析这点之前,不妨大致了解一下概况。搜索引擎使用名为机器人程序(bot)的特殊程序来搜索网络、并把内容编入索引。每个引擎使用不同的技术来查找新网站,并为重要性加权。机器人程序的问题在于,它们并不是真正的Web浏览器。譬如说,谷歌以前使用过时的Lynx浏览器来搜索网页,也就是说它无法评估JavaScript页面、读取结果。最近,谷歌似乎升级了浏览器技术,使用了Mozilla版本(Firefox使用同一个引擎)。有迹象表明,谷歌搜索器(即Googlebot)现在能够点击使用大量JavaScript的超文本链接,并执行里面的代码。
鉴于谷歌使用Mozilla,种种常识表明了这种可能性: Googlebot确实能解释JavaScript,但是这未必帮助AJAX能够被搜索引擎所访问。页面要出现在谷歌的搜索引擎结果页面(SERP)中,必须有一个独特的URL。这意味着,作为XMLHttpRequest(XHR)请求一部分装入的内容就无法直接被编入索引。即便谷歌捕获了来自XHR的文本,它也不会通过简单的超文本连接,把用户引向该应用状态。这给SERP带来了不利影响。
● 影响范围
影响范围风险既是个营销问题,也是个技术问题。AJAX的问题在于,不是每个人都在用它。即便我们的AJAX应用支持绝大多数浏览器版本,还是有那么一部分用户不会在浏览器中启用JavaScript。如果他们处在安全至关重要的严格控制的企业环境下,很可能这样。另外,有些人完全禁用JavaScript,因为他们不希望弹出窗口及其他干扰性的动态行为打扰自己。3%到10%的普通大众禁用了JavaScript。
● 货币化
互联网营销商还很快认识到,AJAX使得流行的网站收入模式陷入混乱。虽然谷歌Adsense确实使用每次点击费用(CPC)这种模式,但其他许多靠广告驱动的网站使用每千次印象费用(CPM)模式,单单根据页面浏览次数奖励广告商。CPM基于这样的想法: 营销商认为,广告价值与品牌的树立及认可之间的关系比与直接会话的关系更重要。而AJAX给CPM带来了问题,因为在正常情况下,如果超文本链接触发XHR而不是整页装入,广告就不会自动记下这是另一次印象。但广告商仍获得了好处,网站却失去了收入。
链接:浏览器的兼容性
● Firefox 3.0
紧跟Firefox 2.0的是Firefox 3.0版本。3.0版本可能更像是升级版本,而不是全新版本。Mozilla正在考虑50项新的潜在特性,包括升级浏览器核心技术、改进管理和安装附件、采用新的图形界面以便应用集成、改进打印功能、隐私浏览功能以及修改过的密码管理器。
对开发人员而言,Firefox 3.0在Web标准兼容性和可访问性方面会意味着更多的改进。一个目标是通过ACID2 Web标准:HTML和CSS呈现测试,这意味着要改动浏览器的核心呈现引擎。符合CSS 2.1的功能也在规划当中,这也会影响页面显示方式。
● Safari 3.0
Safari的下一个版本不大为人所知,Apple也很少就产品线路图发表评论。不过据传Safari 3.0会包括CSS呈现引擎的重大改进,特点是会完全或者局部实现CSS 3.0,包括让用户可以动态调整文本区域大小的功能。Safari 3.0还会包括用于浏览DOM的升级版Web Inspector工具,这将有助于开发人员。
● Internet Explorer 8
考虑到IE7和Vista刚发布,现在讨论IE8似乎为时过早。但微软已经在规划下一个版本。最终产品预计到2008年推出,可能会在一定程度上强调微格式(即行内与HTML嵌入在一起的内容)。虽然应该会出现XHTML支持方面的一些改进,但JavaScript 2.0会不会在规划当中还是个未知数。据IE平台架构师Chris Wilson声称,微软会在布局及遵守CSS 2.1规范方面投入更多精力。他还说,微软希望提高其浏览器对象模型的兼容性,以便更容易配合其他浏览器使用,让编程模式更灵活。
● Opera 10
虽然发布日期还没有定下来,但Opera 10版本似乎要适用于所有平台。Opera的目标就是开发可在任何设备(包括手机和游戏机)及操作系统上运行的一款浏览器,此举有望稍稍改变力量对比,有利于这款功能强大却仍然未得到充分欣赏的浏览器。