Nokogiri XPathやCSS解析がHTMLファイルでより速く動作するかどうかを知りたいです。スピードはどのように違うのですか?XPathやCSSの構文解析が高速(HTMLファイルのNokogiri用)ですか?
答えて
NokogiriにはXPathまたはCSS がありません。です。 XML/HTMLを1つのDOMに解析し、CSSまたはXPathの構文を使用してクエリにすることができます。
CSSセレクタは内部的にXPathに変換されてから、libxml2にクエリを実行するように要求されます。このように(厳密に同じセレクタのために)、XPathは最初にXPathに変換する必要がないため、XPathバージョンはほんのわずかなものになります。
しかし、あなたの質問には一般的な答えはありません。それはあなたが選択しているものと、XPathの外観に依存します。 Nokogiriが作成するのと同じXPathを書くことはないでしょう。あなたは、次の2つの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ブラウザとは異なり、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
半分ミリ秒未満。
うーん、それはまさに私が書くXPathだ。 :) 2番目のクラスは、HTMLクラス属性を解析するときに使用するクラス "トリック"を使用します。この属性は、複数の値をスペースで区切って指定できます。 –
@Phrogz、 "CSSセレクタは内部的にXPathに変換されてからlibxml2にクエリを実行するように要求されていますので、CSSをXPathに変換する必要はないため、XPathバージョンは非常に高速になります最初。" XPathでアクセサを書き込む方法を覚えようとすると、頭が痛い時間を許すのを忘れてしまいました。 :-) –
+1は "それを心配しないでください"。 Zactly!理解しやすくすると、コードのメンテナンスに長期的なメリットがあります。私はコンピュータの時間についてはそれほど心配していませんが、私が心配していることを理解しようとしています。 –
- 1. Ruby XMLのNokogiri/XPathによる構文解析
- 2. PHP構文解析するXML XPathの
- 3. htmlアジリティパックで解析を高速化
- 4. Node.js構文解析のHTML
- 5. railsとnokogiriでhtmlを解析する
- 6. WebalizerやAWstatsの解析ファイルhtmlファイル
- 7. Nokogiri XMLの結果の構文解析の順序
- 8. C++高速文字列解析?
- 9. 高速構文解析クエリでオブジェクトが昇順に返されない
- 10. Nokogiriのclojureに相当するもの(xpathとcssセレクタを使ったxml解析用)
- 11. Python - JsonやXMLを解析するのが速いですか?
- 12. メインスレッドのXML解析が高速ですか?どうして?
- 13. Androidで解析を高速化する
- 14. com.ximplewareの解析XML - のXPath - 構文エラー==>
- 15. Nokogiriでソースhtmlを解析する際の問題
- 16. rexmlとnokogiri XMLの解析
- 17. XMLファイルの構文解析モジュール
- 18. MSGファイル形式の構文解析
- 19. Ruby - nokogiri - 特定のhtmlテーブルのみを解析します
- 20. Android、構文解析html、文字列の文字列の問題
- 21. PHPでXpathを使用してHTMLを解析する
- 22. Nokogiri/xpathを使用して、巨大なHTMLファイルからテキストを取り出す
- 23. 解析HTMLファイル
- 24. Javaのxpathとseleniumを使用したHTMLテーブルデータの解析
- 25. XPATHの解析テーブル
- 26. java xpath解析
- 27. PHP Domドキュメントのhtmlは高速ですか、preg_match_all関数が高速ですか?
- 28. Vala - 構文解析
- 29. JSsonの構文解析エラー
- 30. TLSハンドシェイクメッセージの構文解析
['Benchmark'](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html)を参照してください。 –