握Flash是一个很重要的特长,因为许多老板都非常需要有这种技能的员工。不过,这种易用性也是有代价的。
图1-4 Flash应用
像许多解决方案一样,Flash需要客户端软件。尽管许多流行的操作系统和浏览器上都内置有所需的Shockwave播放器插件,但并非普遍都有。虽然能免费下载,但由于担心感染病毒,使得许多用户都拒绝安装这个软件。Flash应用可能还需要大量网络带宽才能正常地工作,另外,由于没有广泛的宽带连接,Flash的推广受到局限(因此产生了“跳过本页”之类的链接)。虽然确有一些网站选择建立多个版本的Web应用,分别适应于不同的连接速度,但是许多公司都无法承受支持两个或更多网站所增加的开发开销。
总之,创建Flash应用需要专用的软件和浏览器插件。applet可以用文本编辑器编写,而且有一个免费的Java开发包,Flash则不同,使用完整的Flash工具包需要按用户数付费,每个用户需要数百美元。尽管这些因素不是难以逾越的障碍,但它们确实减慢了Flash在动态Web应用道路上的前进脚步。
1.3.6 DHTML革命
当Microsoft和Netscape发布其各自浏览器的第4版时,Web开发人员有了一个新的选择:动态HTML(Dynamic HTML,DHTML)。与有些人想像的不同DHTML不是一个W3C标准,它更像是一种营销手段。实际上,DHTML结合了HTML、层叠样式表(Cascading Style Sheets,CSS)、JavaScript和DOM。这些技术的结合使得开发人员可以动态地修改Web页面的内容和结构。
最初DHTML的反响很好。不过,它需要的浏览器版本还没有得到广泛采用。尽管IE和Netscape都支持DHTML,但是它们的实现大相径庭,这要求开发人员必须知道他们的客户使用什么浏览器。而这通常意味着需要大量代码来检查浏览器的类型和版本,这就进一步增加了开发的开销。有些人对于尝试这种方法很是迟疑,因为DHTML还没有一个官方的标准。不过,将来新标准有可能会出现。
1.3.7 XML衍生语言
20世纪90年代中期,基于SGML衍生出了W3C的可扩展标记语言(eXtensible Markup Language,XML),自此以后,XML变得极为流行。许多人把XML视为解决所有计算机开发问题的灵丹妙药,以至于XML几乎无处不在。实际上,Microsoft就已经宣布,Office 12将支持XML文件格式。
如今,我们至少有4种XML衍生语言可以用来创建Web应用(W3C的XHTML不包括在内):Mozilla的XUL;XAMJ,这是结合Java的一种开源语言;Macromedia的MXML; Microsoft的XAML。
XUL:XUL(读作“zool”)代表XML用户界面语言(XML User Interface Language),由Mozilla基金会推出。流行的Firefox浏览器和Thunderbird邮件客户端都是用XUL编写的。利用XUL,开发人员能构建功能很丰富的应用,这个应用可以与因特网连接,也可以不与因特网连接。为了方便那些熟悉DHTML的开发人员使用,XUL设计为可以跨平台支持诸如窗口和按钮等标准界面部件。虽然XUL本身不是标准,但它是基于各种标准的,如HTML 4.0、CSS、DOM、XML和ECMAScript等等。XUL应用可以在浏览器上运行,也可以安装在客户端主机上。
当然,XUL也不是没有缺点。它需要Gecko引擎,而且目前IE还没有相应的插件。尽管Firefox在浏览器市场中已经有了一定的份额,但少了IE的支持还是影响很大,大多数应用都无法使用XUL。目前开展的很多项目都是力图在多个平台上使用XUL,包括Eclipse。
XAML:XAML(读作“zammel”)是Microsoft即将推出的操作系统(名为Windows Vista)的一个组件。XAML是可扩展应用标记语言(eXtensible Application Markup Language)的缩写,它为使用Vista创建用户界面定义了标准。与HTML类似,XAML使用标记来创建标准元素,如按钮和文本框等。XAML建立在Microsoft的 .NET平台之上,而且可以编译为 .NET类。
XAML的局限应当很清楚。作为Microsoft的产品,它要求必须使用Microsoft的操作系统。多数情况下特别是在大公司中,这可能不成问题,但是有些小公司使用的不是Microsoft的操作系统,总不能削足适履吧,就像是没有哪家公司会因为买家没有开某种牌子的车来就把他拒之门外。Vista交付的日期一再推迟,与此同时XAML也有了很大变化,不再只是一个播放器。据说,在未来几年内,我们可能会看到一个全新的XAML。
MXML:Macromedia创建了MXML,作为与其Flex技术一同使用的一种标记语言。MXML是最佳体验标记语言(Maximum eXperience Markup Language)的缩写,它与HTML很相似,可以以声明的方式来设计界面。与XUL和XAML类似,MXML提供了更丰富的界面组件,如DataGrid和TabNavigator,利用这些组件可以创建功能丰富的因特网应用。不过,MXML不能独立使用,它依赖于Flex和ActionScript编程语言来编写业务逻辑。
MXML与Flash有同样的一些限制。它是专用的,而且依赖于价格昂贵的开发和部署环境。尽管将来.NET可能会对MXML提供支持,但现在Flex只能在J2EE应用服务器上运行,如Tomcat和IBM的WebSphere,这就进一步限制了MXML的广泛采用。
XAMJ:让人欣喜的是,开源社区又向有关界面设计的XML衍生语言领域增加了新的成员。XAMJ作为另一种跨平台的语言,为Web应用开发人员又提供了一个工具。这种衍生语言基于Java,而Java是当前最流行的面向对象语言之一,XAMJ也因此获得了面向对象语言的强大功能。XAMJ实际上想要替代基于XAML或HTML的应用,力图寻找一种更为安全的方法,既不依赖于某种特定的框架,也不需要高速的因特网连接。XAMJ是一种编译型语言,建立在“clientlet”(小客户端)体系结构之上,尽管基于XAMJ的程序也可以是独立的应用,但通常都是基于Web的应用。在撰写本书时,XAMJ还太新,我们还没有听到太多批评的声音。不过,批评是肯定会有的,让我们拭目以待。
当谈到“以X开头的东西”时,别忘了W3C XForms规约。XForms设计为支持更丰富的用户界面,而且能够将数据与表示解耦合。毋庸置疑,XForms数据是XML,这样你就能使用现有的XML技术,如XPath和XML Schema。标准HTML能做的,XForms都能做,而且XForms还有更多功能,包括动态检查域值、与Web服务集成等等。不同于其他的许多W3C规约,XForms不需要新的浏览器,你可以使用现在已有的许多浏览器去实现。与大多数XML衍生语言一样,XForms是一种全新的方法,所以它要得到采纳尚需时日。
1.3.8 基本问题
有了以上了解,你怎么想?即使是要求最苛刻的客户应用,也已经把Web作为首选平台。很显然,基于Web的应用很容易部署,这种低门槛正是Web应用最耀眼的地方。由于浏览器无处不在,而且无需下载和安装新的软件,用户利用基于浏览器的客户端就能很轻松地尝试新的应用。用户只需点击一个链接就能运行你的应用程序,而不用先下载几兆比特的安装程序才行。基于浏览器的应用也不考虑操作系统是什么,也就是说,不仅使用不同操作系统(如Linux和Mac OS X)的人能运行你的应用程序,而且你也不必考虑针对不同的操作系统开发和维护多个安装包。
既然基于Web的应用是前所未有的好东西,那我们为什么还要写这本书?如果回头看看因特网的起源就可以知道,最初因特网实际上就是为了科学家们和学术机构间交换文章和研究成果,这是一种简单的请求/响应模式。那时不需要会话状态,也不需要购物车,人们只是在交换文档。但现在你有很多办法来创建动态的Web应用,如果想让应用真正深入人心,赢得大量的用户,就必须在浏览器上大做文章,这说明,因特网以请求/响应模式作为基础,由此带来的同步性对你造成了妨碍。
与Microsoft Word或Intuit Quicken之类的胖客户应用相比,Web模型当然只能根据一般用户需要做折中考虑。不过,由于Web应用很容易部署,而且浏览器的发展相当迅速,这意味着大多数用户都已经学会了适应。但是,还是有许多人认为Web应用只能算“二等公民”,给人的用户体验不是太好。因为因特网是一个同步的请求/响应系统,所以浏览器中的整个页面会进行刷新。最初,这种简单的请求并没有什么问题。如果用户做了一两处修改,就必须向服务器发回整个文档,而且要重新绘制整个页面。尽管这样是可行的,但是这种完全刷新的局限,意味着应用确实还很粗糙。
这并不是说开发人员只是袖手旁观,全然接受这种状况。Microsoft对于交互式应用有一定了解,而且对于这种标准请求/响应模式的限制一直都不满意,因此提出了远程脚本(remote scripting)的概念。远程脚本看似神奇,其实很简单:它允许开发人员创建以异步方式与服务器交互的页面。例如,顾客可以从下拉列表中选择状态,这样就会在服务器上运行一个脚本,计算顾客的运费。更重要的是,显示这些运费时无需刷新整个页面!当然,Microsoft的方案只适用于它自己的技术,而且需要Java,但有了这个进步,说明更丰富的浏览器应用并不是海市蜃楼。
对于同步页面刷新问题还有其他一些解决方案。针对Microsoft的远程脚本,Brent Ashley在创建JavaScript远程脚本(JavaScript Remote Scripting,JSRS)时开发了一个平台中立(独立于平台)的方案。JSRS依赖于一个客户端JavaScript库和DHTML,可以向服务器做异步的调用。与此同时,许多人利用了IFRAME标记,可以只加载页面中的某些部分,或者向服务器做“隐藏”的调用。尽管这是一个可行的方法,而且也为很多人所用,但它肯定不是最理想的,还有待改善。
1.3.9 Ajax
终于谈到这里了:客户希望得到一个功能更完备的应用,而开发人员想避开繁琐的部署工作,不想把可执行文件逐个地部署到数以千计的工作站上。我们已经做过很多尝试,但是任何方法都不像它原来标榜的那么完美。不过,最近一个极其强大的工具横空出世了。
是的,我们又有了一个新的选择,新的工具,可以创建的确丰富的基于浏览器的应用。这就是Ajax。Ajax不只是一个特定的技术,更应算是一种技巧,不过前面提到的JavaScript是其主要组件。我们知道,你可能会说“JavaScript根本不值一提”,但是由于Ajax的出现,人们对这种语言又有了新的兴趣,应用和测试框架再加上更优秀的工具支持,减轻了开发人员肩头的重担。随着Atlas的引入,Microsoft对Ajax投入了大力支持,而名声不太好的Rails Web框架也预置了充分的Ajax支持。在Java世界中,Sun已经在其BluePrints Solutions Catalog中增加了许多Ajax组件。
坦
上一页 [1] [2] [3] [4] [5] 下一页