ArcGIS Server Web ADF、Flex API以及Silverlight API的比较
1.1 Flex API、Silverlight API 同ADF作比较
1.1.1 Flex API、Silverlight API 同ADF相比的优势
一、它们均采用REST风格web服务(关于REST的相关资料见附件)。
REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST之所以能够提高系统的可伸缩性,是因为它强制所有操作都是stateless的,这样就没有context的约束,如果要做分布式、做集群,就不需要考虑context的问题了。同时,它令系统可以有效地使用pool。REST对性能的另一个提升来自其对client和server任务的分配:server只负责提供resource以及操作resource的服务,而client要根据resource中的data和representation自己做render。这就减少了服务器的开销。(REST负责将需要的数据传递客户端,工作量较大的渲染工作放在客户端进行,有效地减轻了服务器的压力,使得用户体验更佳,视觉效果更好。)
二、Flex API和Silverlight API 是基于REST的设计,ArcGIS Server REST将GIS的基础和核心功能进行了封装以服务的方式提供给客户端,如常见的地图展示,图层信息访问以及一些分析功能。客户端应用意味着更少的服务器往返,更好的可伸缩性。
三、RIA相对于传统的web的优势是其表现力丰富、网络效率高以及交互能力强。
1.1.2 Flex API、Silverlight API同ADF相比的劣势
一、浏览器插件的安装问题,一些客户可能会限制浏览器安装插件(flash插件基本上计算机上都有,silverlight相对来说更少用一点)。
二、搜索引擎无法进行搜索(因为搜索引擎大部分都是通过爬虫抓取页面,然后分析页面内容,建立索引。比如说flex建立的页面内嵌的是flash,爬虫无法分析。关于搜索引擎的蜘蛛爬行,如果系统是对外开放的,自然用ADF要好,但是要是用账户密码登陆的,可以考虑用flex)。
三、Web ADF有更大的功能集可以使用(下文具体说明)。
WebADF框架:
ArcGIS Web ADF for .NET能够集成丰富的GIS功能到Web应用程序中。ADF包含一组和Visual Studio集成的Web控件和组件来开发Web应用。Web ADF建立在.NET框架之上,利用一套定制的Web控件和提供本地和远程数据资源访问的新类来扩展.NET框架。ADF提供的是控件和API。控件是提供用户API和Specific API的类来具体完成GIS的功能。Web ADF提供了一个框架使用定制的ASP.NET Web控件合并和使用一个或者多个数据源。Web控件以可视的方式显示地理数据并且和地理数据交互。
ArcGIS Flex API以及ArcGIS Silverlight API 框架:
ArcGIS API 可以说是ArcGIS Server的扩展开发组件,它可以使你在使用ArcGIS Server构建GIS服务的基础上,开发丰富的因特网应用(RIA, Rich Internet Applications)。它的优点在于可以使ArcGIS提供的各种资源(如Map、GP模型)和API提供的组件相结合,构建表现出色、交互体验良好的Web应用。Flex API以及Silverlight API通过ESRI提供的ArcGIS Server REST(表述性状态转移) API访问Web服务,它继承了Web 服务 REST API 的特征。
每一种资源都有统一的URL来标识,资源通过链接被相互关联在一起,如MapService的各种操作功能,并且资源有多重表述方式,这些都取决于应用和需求。
Web ADF和Flex API、Silverlight API之间的关系就是企业级和轻量级的关系(flex是一种表现方式,需要优化的是数据存储结构以及传输方式), Flex API和Silverlight API不论访问数据服务还是开发代码都比较简单(Flex API在前台操作数据或组织界面的时候较为简单),浏览、查询的速度比Web ADF的快,这是因为Flex API和Silverlight API 是基于REST的设计,而REST的是无状态的,从客户到服务器的每个请求都必须包含理解该请求所必需的所有信息,并且不能利用任何存储在服务器上的上下文,允许服务器组件迅速释放资源,并进一步简化其实现,因此服务器不必跨多个请求管理资源的使用。对于公众级别的应用,显然使用客户端API将压力分散到客户端更为合适。
然而由于Flex API、Silverlight API是基于REST的设计,会受到REST的一些限制,如客户端发送请求的字符串长度不能超过2048字节,因此,受到传递参数长度的限制而无法实现复杂的功能比如复杂的Geoprocessing 服务。Web ADF没有这种限制,并且WebADF自定义控件的灵活性很大,则可以适合用于实现更为复杂的功能。它是基于有状态的设计,可以充分利用AO资源,进行管理员角色的应用开发,适用于企业级的深度GIS应用,充分利用服务器端的资源,如在线编辑等(在ArcGIS 10中已提供了数据修改的REST接口)。GP工具为WebGIS应用提供了较大的扩展空间,但前提是必须使用桌面中已有的或自定义工具,ADF可以不依赖于其他任何软件通过ServerContext实现GP中所有功能,降低软件成本。
Flex 本身也有功能限制,Flex专注于客户端,服务器端操作功能很少,譬如说一个aspx网站 ,我们可以通过操作在服务端生成一个文件(比如登录日志,备份等等),或者读取服务端的一个文件(比如xml),但是Flex是无法操作服务端的文件的,无法写入,读取也有限制(安全原因,具体百度跨域访问)。从功能角度来看,WebADF 为.NET和Java开发者提供了许多Task(任务)控件和高效率工具。如WebADF包含了许多功能完善的编辑工具,打印任务,同时实现了与GP(地处理)服务的紧密集成,以及与ArcGIS Server Manger等的集成。而ArcGIS FLEX API则提供了地图组件和一些开发工具(如AS3库),以便更好地与地址定位,查询服务及其它AGS (ArcGIS Server)资源进行集成。有些在ADF中较为方便实现的功能在Flex中实现则较为麻烦,比如最简单的传递一个参数,然后去数据库中查询符合的例子,比如查询条件为where id>1,在adf中可以直接操作数据库,但flex是无法与数据库连接的,必须先传到java或者php或者aspx,flex不具备高层次的能力。
1.2 Flex API与Silverlight API的比较:
一、.Silverlight API与Visual Studio整合,且.NET开发人员能够更快速的学习。Silverlight的语言特性要比Flex更佳:.Net框架结构上更加完备、多种开发语言支持、Linq和客户端多线程,这些都是Flex所欠缺的特性,应该为Silverlight额外加分。但由于受到开发工具和应用范围的限制,这些优势目前并没有充分发挥出来。
二、框架方面,Flex的优势较大。
1、Flex的界面组件已经比较完整,在数量以及功能方面都超过Silverlight的组件。但是Flex里也缺少如AutoComplete等少数重要组件。
2、 Flex的布局机制简单且灵活。Flex还支持基于辅助线的布局,Silverlight里面没有这样的功能。Silverlight的布局组件不仅数量少,基于附加属性的语法也比较冗长拖沓。
3、Flex可以自建系统皮肤或者动画的,Silverlight基于依赖属性的动画只相当于Flex的AnimationProperty,数量和功能都比较受限,并且只对于Dependency Property有效。
4、Flex的一个问题是不支持全局异常处理,对框架设计而言这是明显的缺憾。Silverlight支持应用程序级别的全局异常处理。不过这个异常处理似乎也不是非常完整,有个别异常还是会漏网,造成Silverlight插件出错。
5、Flex的数据绑定语法直观且简洁,可以使用几乎任意的表达式。声明绑定属性的语法也相当简单,任何属性只要加上一个[Bindable]标签即可。
Silverlight的数据绑定语法较为累赘,至少造成了两个严重后果:
a.大量数据绑定属性造成XAML冗长难读;
b.依赖属性编写很麻烦,需要大量样本代码,而许多框架特性严重依赖于依赖属性,使得编写Silverlight组件较为繁琐。
6、Flex包括一个非常方便的界面特性:State,在界面有少量变化的时候使用较为方便,可以避免很多不必要的编码。这是Silverlight所欠缺的。Silverlight的DeepZoom是Flex所没有的功能。
三、运行环境以及性能方面:Flash的插件安装包较小且可以做到全自动安装升级,silverlight插件安装包相对较大且需要手工执行安装步骤。在性能方面,Flex在画面渲染效率上优于Flex,而Silverlight则在数学计算上效率高于Flex,但由于浏览器插件的主要功能是提供和显示,用大量数学场景运算并不多,Flex还是占有一定优势。
Flex和Silverlight目前来看都是存在一些问题的。有些属于语言设计的范畴,比如Silverlight绑定属性的语法较为累赘,但这些问题受系统设计限制,基本上已经没有修改的余地。Silverlight框架还不够完善,界面组件有限,加上Silverlight Toolkit一类扩展可以得到很大改进。
近几年,Flex仍然具有领先优势,但该优势目前已经有所缩小:Sliverlight 1功能过于贫弱,这时Flex遥遥领先; Silverlight2在框架结构上比版本1已经有改天换地的提高,拉近了和Flex的距离,但可用组件仍然严重不足; Silveright 3在结构上没有什么重大改变,主要在于功能的完善,Silverlight在部分特性上甚至超越了Flex。
(鉴于微软自身的市场定位,它绝不希望基于Web的技术强大到足以让用户忽略浏览器和操作系统的地步。因此Silverlight将来究竟能发展到什么程度,长远来看还是不得不打上一个很大的问号,即使目前来看微软仍然在力推这门技术。不过已经使用了Silverlight的也无须太过顾虑,只要是微软推出的技术,不论好或不好,就算是被放弃以后也还能够生存相当一段时间。Flash Player在浏览器中的覆盖率现在超过95%,地位已经极其稳固,有如今日之Windows,但同时也意味着基本上再没有上升的空间,只能依势固守。而Silverlight则有望以后起之秀的姿态从Flash中抢走一部分市场份额,然而考虑到其他厂商对微软的警惕心理和Web标准领导话语权的力量,Silverlight恐怕也难以取得非常理想的战绩。)