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 不到半毫秒. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |