在cxf测试调用。net开发的Webservice时,发现有一fastinfoset的jar包,故google了一把。
转自http://webservices.ctocio.com.cn/tips/148/6506648.shtml
作者: William Brogden, 出处:TechTarget
在互联网出现前,任何为慢速调制解调器和昂贵线路编写通信程序的人在一看到XML后,第一个反映就是觉得它的格式太浪费了。诚然,我们很难节省字节 来优化XML。传输5000个字节的数据很可能只有500字节的真实内容,而其它的一点用也没有。"Fast Infoset"标准创建了一种压缩编码方法来传输XML Information Set,显著节省了带宽和处理能力。
什么是XML Information Set?
尽管很多人都在迟疑是不是需要另一种XML标准,但W3C却创建了"XML Information Set"或者叫"Infoset"推荐书。该说明书试图在更抽象的级别标准化XML文档各部分的所有定义,而不是用文字语法。
所有处理XML的说明书都可以用Infoset定义,并且保证它们都在说同一件事。为了避免使用类似在专门的XML处理API中出 现"Element"等术语,该说明书改为称呼为"Information Items"。它识别十一种不同类型的信息项。任何能处理所有的项的XML文档被认为拥有完整的Infoset。
Fast Infoset标准
Fast Infoset的编码标准由International Telecommunications Union (ITU)和International Organization for Standardization (ISO)负责,分别叫做"ITU-T Rec. X.891"和ISO/IEC 24824-1。该标准发表在被广泛使用的电信标准Abstract Syntax Notation One (ASN.1)上。
Fast Infoset的替代方法
由于XML冗余的性质,也就不奇怪很多人尝试为更有效的传输而压缩文档了。广为人知的ZIP和GZIP编码是很好的技术。在客户端和服务器端为 数据流执行zip压缩和解压缩的过滤器很容易安装,因为zip压缩只知道字符序列,它不能利用XML文档的正规结构,还得为解压缩而消耗处理能力。
Fast Infoset的Sun的Java实现
Sun的Java Web Service Developers Pack (JWSDP)中实现了Fast Infoset,而开源的Glassfish项目则实现了第二版。它仍然被认为是一种不成熟的技术,并未发挥全部的潜力。例如,它不能压缩大块文字,也不 能支持Fast Infoset说明书中的其它高级特性。
JWSDP 2.0版本提供了一种协商机制,通过它Web服务客户端可以在初次与服务器联系时使用标准HTTP头"Accept"和"Content-Type",来 指明自己可以接受Fast Infoset编码的数据。如果Web服务端已经被配置合适的话,那么以后的会话将都会使用Fast Infoset编码。
Fast Infoset实验
为了有所了解,我们使用Fast Infoset格式的XML文档,普通文本文档和zip格式的文档来做对比。我执行了一些计时实验。测试XML文档是一套XML格式的测试问题,大多数内 容都是文本元素且没有命名空间。该文档比我以前见到的其它Fast Infoset测试对象都要大。
我从Sun的Glassfish项目得到最新的Fast Infoset工具集,创建了一个Fast Infoset编码版本的文档,然后用WinZip创建了一个zip版本的。该工具集提供选择Document Object Model (DOM), SAX和StAX三种风格的解析方式。StAX是XML的Streaming API,它是一个“拉”方式的API,很多程序员都觉得它和SAX一起很好用。我只对DOM创建解析器进行了计时,因为它经常在SOAP Web服务中被使用。
对Fast Infoset格式的实验显示,所有XML标签都被压缩成编码,而文本内容还是文字。因此,我又用zip方式压缩了Fast Infoset文件。以下是结果文件的大小:
- Plain XML text file 769,396 bytes
- Zipped XML text file 68,715
- Fast Infoset formatted 548,669
- Zipped Fast Infoset 71,929
为了从影响实际Web服务的网络延迟方面来判断不同格式的效果,我写了一个测试程序来计算从磁盘文件上创建标准Java Document对象所花的时间。我事先进行了JVM的预热,并在计时部分外进行了垃圾收集。该Java标准库被用来在读zip文件时创建一个到解析器的 输入流。为了计时,我使用了JAMon开源性能检测工具集(强烈推荐)。以下时间是10次重复实验的平均值,单位微秒。
- Parse plain XML text file 62.8 msec
- Parse zipped XML text file 70.4
- Parse Fast Infoset formatted 31.3
- Parse zipped Fast Infoset 37.4
我得出结论,Fast Infoset编码显著降低了解析XML文档的时间,但只能稍微降低文本大小,而zip编码则能很好的以一定处理时间代价降低文本大小。我认为,我们可以随着此工具被使用得更广泛而更好的在Web服务中使用Fast Infoset。
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>