提高Web Service效率的几种方式(转)

2008-02-20 16:01
基于SOAP的Web Service的性能一直为人诟病,由于采用 XML标准进行系统间的数据传输,加大了传输的数据量,尤其是在传输一些具有比较严格结构的数据时,会使得传输效率有所下降,以至于有人认为如果真的要考虑性能,就不应该用SOAP。但无疑SOAP已然成长为一个通行的标准。作为开发人员,更需要考虑的是在此架构下如何提升Web Serive调用的效率,下面讨论的几种方式可供参考: 

1.及时释放资源 
通常,客户端的WebService代理类会一一对应生成所有的WebMethod的代理方法,从而直接导致了客户端Web Service代理类的体积庞大,而庞大的WebService代理实例将占用大量的内存。在设计时,建议应根据系统逻辑来规划Web Service类,不要把所有的操作方法都放在一个WebService类中;在使用时才去创建相关的WebService类。提倡尽量晚的创建,尽量早的释放。 

2.让一次Web Service调用完成尽快多的工作 
客户端应用程序应该尽量少地调用Web Service,在每一次调用Web Service的服务时也要尽量地把有用的信息处理在一次调用中完成,或是把多个远程Web Service调用封装在一个调用之中,以增加数据的使用率并且减少网络往复传输。例如,在查询数据时,尽量将WebMethod定义为getDataList(String query)以返回一个列表,而不是getDataById(int id)仅返回一条记录。 

3. 对于整个 XML 传输文件进行压缩 
经常用于对数据压缩的 API 有 gzip 等方式,在java.util.zip包中提供了相关的类。对象模型序列化成 XML 之前,可以对数据流进行压缩,再在XML接收端对已经压缩的文件进行解压缩。不过压缩和解压缩虽然可以使得 XML 的体积大大减少,但是其过程却是十分耗费CPU及内存。对于配置不高的客户端甚至是服务器端,都会造成不小的压力,建议用于网络瓶颈突出的情况或是主机配置比较高的情况。 

4. 选择高效的XML解析器 
XML解析器最基本的方式有DOM和SAX两种,DOM解析器的优点在于:1.XML树在内存中完整存储,可以直接修改其数据和结构;2.可以通过该解析器随时访问XML树中的任何一个节点; 3.DOM解析器的API在使用上也相对比较简单。但缺点在于如果XML文档体积比较大时,将文档读入内存是非常消耗系统资源的。SAX对内存的要求比较低,因为它让开发人员自己来决定所要处理的标签。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。但用SAX方式进行XML解析时,需要顺序执行,所以很难访问到同一文档中的不同数据。此外,在基于该方式的解析编码过程也相对复杂。比较十分有效。一个系统中往往需要同时使用这两种解析方式,以达到解析的最高效率 

5.简化标签 
<Name>不妨简化为<N>,<Address>不妨简化为<A>,只要事先约定好(最好建立一个对照表),这种简化有助于提高传输和处理效率。 

6.使用缓存 
一般的Web Service部署程序都可以采用缓存机制的处理。但如果数据更新频繁,则不建议使用缓存。
原文地址:https://www.cnblogs.com/ningxu/p/3401096.html