加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – XPath或CSS解析速度更快(对于HTML文件的Nokogi

发布时间:2020-12-16 21:25:04 所属栏目:百科 来源:网络整理
导读:我想知道Nokogiri XPath或CSS解析是否可以更快地使用 HTML文件.速度有何不同? 解决方法 Nokogiri没有XPath或CSS解析.它将 XML / HTML解析为单个DOM,然后您可以使用CSS或XPath语法进行查询. 在请求libxml2执行查询之前,CSS选择器在内部转换为XPath.因此(对于
我想知道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(' ',' external ')]

与Web浏览器不同,id和class属性没有加速缓存,因此选择它们并没有帮助.实际上,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

不到半毫秒.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读