Web服务的Fast Infoset标准

日期: 2008-06-05 作者:William Brogden 来源:TechTarget中国 英文

在互联网出现前,任何为慢速调制解调器和昂贵线路编写通信程序的人在一看到XML后,第一个反映就是觉得它的格式太浪费了。诚然,我们很难节省字节来优化XML。传输5000个字节的数据很可能只有500字节的真实内容,而其它的一点用也没有。”Fast Infoset”标准创建了一种压缩编码方法来传输XML Information Set,显著节省了带宽和处理能力。

  什么是XML Information Set?   尽管很多人都在迟疑是不是需要另一种XML标准,但W3C却创建了”XML Information Set”或者叫”Infoset……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

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。

相关推荐