XPath或CSS解析更快(对于HTML文件的Nokogiri)



我想知道Nokogiri XPath或CSS解析在HTML文件中是否工作得更快。速度有什么不同?

Nokogiri没有XPath或CSS 解析。它将XML/HTML解析成一个DOM,然后您可以使用CSS或XPath语法来查询。在要求libxml2执行查询之前,

CSS选择器在内部转换为XPath。因此(对于完全相同的选择器)XPath版本会快一点点,因为CSS不需要首先转换为XPath。

然而,你的问题没有一般答案;这取决于您所选择的内容以及XPath的外观。您可能不会编写与Nokogiri创建的相同的XPath。例如,看看您能否猜出以下两个CSS语句的XPath:

puts Nokogiri::CSS.xpath_for('#foo')
#=> //*[@id = 'foo']

puts Nokogiri::CSS.xpath_for 'div.article a.external'
#=> //div[contains(concat(' ', @class, ' '), ' article ')]//a[contains(concat(' ', @class, ' '), ' external ')]

与Web浏览器不同,idclass属性没有加速缓存,因此选择它们没有帮助。实际上,div.article的一般解释比div[@class='article']要复杂得多。

就像@LBg评论的那样,如果绝对速度是至关重要的,你应该自己测试

然而,我建议:不用担心。计算机。编写对您(程序员)最方便的内容。如果CSS选择器更容易编写,输入更快,并且在以后检查代码时更容易理解,那么就使用。当您需要完成CSS选择器语法无法完成的事情时,请使用XPath。

Nokogiri将一个相当复杂的CSS转换为XPath需要多长时间?

t = Time.now
1000.times do |i|
  # Use a different CSS string each time to avoid built-in caching
  css = "body#foo table#bar#{i} thead th, body#foo table#bar#{i} tbody td"
  Nokogiri::CSS.xpath_for(css)
end
puts (Time.now - t)/1000
#=> 0.000405041

小于半毫秒

相关内容

  • 没有找到相关文章

最新更新