Ruby XML综述:Hpricot 0.7、稳定的Libxml-ruby及Nokogiri

最近由于Nokogiri、Hpricotlibxml-ruby之间的竞争致使Ruby的XML支持得到了极大的改进。Nokogiri发布于去年秋天,它基于本地的libxml2和libxslt:

由于Nokogiri使用了libxml2,因此使用者可以获得如下好处:快速解析、i18n支持、快速搜索、基于标准的XPath支持、命名空间支持及成熟的HTML修正算法。

Nokogiri还具有诸如使用XPath和CSS选择符进行搜索的特性,同时它还支持Ruby 1.9.1。

一些基准的结果表明Nokogiri的性能是最棒的,之后Hpricot的维护者就花费了大量心力对该库进行改进并发布了Hpricot 0.7:

来享受这个新的、卓越的Hpricot吧。它快一些、支持Ruby 1.9而且还进行了不少修复...

我敢肯定你想知道为何面对Nokogiri和LibXML的强大竞争我还要更新Hpricot呢。记住Hpricot不依赖于其他任何东西,同时它比这两个库都要小。Hpricot使用的是自己的基于Ragel的解析器,这样你就可以随意修改解析器了,相对来说其代码也更精简。

最重要的是过去Hpricot曾运行在JRuby上。现在我正忙于将IronRuby和0.7版的一些代码合并到JRuby上。这意味着无需调整你的代码就能运行在多种Ruby平台上,因此我这么做值了,你觉得呢?

最后libxml-ruby也发布了1.0版:

* 支持Ruby 1.9.1
* 对OS X 10.5和MacPorts开箱即用的支持
* 优雅、干净的API可以轻松完成一些简单的事情,同时还提供了你所需要的libxml2的所有功能
通过一个个的检查,最后我终于发现了一个隐蔽的问题:
int	dictNames	: Use dictionary names for the tree
该设置控制的是libxml2是否使用dictionary来缓存之前解析过的字符串。字符串的缓存与否会对性能造成极大的影响,因此默认情况下缓存应该是开启的。目前libxml-ruby 1.2.3+采取的都是这种方式。

借助于这个改变,现在libxml-ruby的性能与Nokogiri已不相上下。
 

查看英文原文:Ruby XML Roundup: Hpricot 0.7, Stable Libxml-ruby and Nokogiri

你可能感兴趣的:(Ruby XML综述:Hpricot 0.7、稳定的Libxml-ruby及Nokogiri)