Mi piacerebbe sapere se Nokogiri XPath o CSS parsing funziona più velocemente con i file HTML. Come è diversa la velocità?XPath o CSS che analizzano più velocemente (per Nokogiri su file HTML)?
risposta
Nokogiri non ha XPath o CSS parsing. Analizza XML/HTML in un singolo DOM che è quindi possibile utilizzare la sintassi CSS o XPath nella query .
I selettori CSS vengono trasformati internamente in XPath prima di chiedere a libxml2 di eseguire la query. In quanto tale (per gli stessi identici selettori) la versione XPath sarebbe una piccola frazione più veloce, poiché il CSS non ha bisogno di essere prima convertito in XPath.
Tuttavia, la tua domanda non ha una risposta generale; dipende da cosa stai selezionando, e che aspetto ha XPath. È probabile che non scriveresti lo stesso XPath creato da Nokogiri. Ad esempio, vedere se è possibile indovinare il XPath per le seguenti due affermazioni CSS:
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 ')]
A differenza di un browser Web, id
e class
attributi non hanno di cache accelerato-up, quindi selezionando per loro non aiuta. In effetti, l'interpretazione generale di div.article
richiede molto più lavoro di qualcosa come div[@class='article']
.
Come ha commentato @LBg, è necessario eseguire un benchmark per te se la velocità assoluta è fondamentale.
Tuttavia, vorrei suggerire questo: non preoccuparti per questo. I computer sono fast. Scrivi ciò che è più conveniente per te, il programmatore. Se un selettore CSS è più facile da creare, più veloce da digitare e più facile da comprendere quando si rivede il codice in un secondo momento, lo usa quello. Usa XPath quando devi fare cose che non puoi fare con la sintassi del selettore CSS.
Quanto tempo impiega Nokogiri per convertire un CSS ragionevolmente complesso in 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
Meno di mezzo millisecondo.
Hmm, questo è esattamente lo XPath che vorrei scrivere. :) Il secondo usa il "trucco" di classe che devi usare quando analizzi un attributo di classe HTML, che può avere più valori separati da spazi. –
@Phrogz, "I selettori CSS vengono trasformati internamente in XPath prima di chiedere a libxml2 di eseguire la query. Come tale (per gli stessi identici selettori) la versione XPath sarebbe una piccola frazione più veloce, poiché il CSS non ha bisogno di essere convertito in XPath primo." Hai dimenticato di consentire il tempo di scratch della testa cercando di ricordare come scrivere l'accessor in XPath. :-) –
+1 per "non preoccuparti". Zactly! Più facile da capire ha benefici a lungo termine nel mantenimento del codice. Non mi preoccupo tanto del tempo del computer, è il mio tempo trascorso a cercare di capire cosa è stato scritto che mi riguarda. –
- 1. Nokogiri xpath() 'o' operatore?
- 2. Come utilizzare XPath in Nokogiri?
- 3. Richiesta spazio nomi Nokogiri/Xpath
- 4. come utilizzare i metodi Nokogiri .xpath & .at_xpath
- 5. Esiste una libreria simile a lxml o nokogiri per Java?
- 6. Perché non Nokogiri xpath come dichiarazioni xmlns
- 7. rotaie Nokogiri Nessun file o directory
- 8. Accesso HTML in Nokogiri
- 9. Quale è più veloce, XPath o Regexp?
- 10. Cambia o scambia il CSS di più elementi HTML contemporaneamente
- 11. Per prestazioni, utilizzare uno o più file css?
- 12. lxml contesto html XPath
- 13. Come eliminare più velocemente?
- 14. Nokogiri (rubygem): Trovare e sostituire tag HTML
- 15. Linee curve che utilizzano solo HTML e/o CSS
- 16. HTML Treebuilder XPath per estrarre i collegamenti
- 17. Ruby o altre lingue funzioneranno più velocemente con Parrot?
- 18. selettore CSS Converti in XPath
- 19. Come ottenere elementi HTML con più classi CSS
- 20. Estratto BeautifulSoup XPATH o CSS Percorso del nodo
- 21. Facile da gestire CSS o HTML leggero?
- 22. CSS/JavaScript/hacker: Rileva: styling visitato su un link * senza * controllare, direttamente o farlo più velocemente di me
- 23. XPath per selezionare più tag
- 24. File HTML GWT con CSS
- 25. Proprietà CSS sia per "html" che per "body"
- 26. Seleziona su più criteri con XPath
- 27. CSS o Javascript che possono ridimensionare qualsiasi HTML visualizzato su iphone
- 28. Come creare indici più velocemente?
- 29. Scappa la citazione singola in XPath con Nokogiri?
- 30. Estrazione XPath lxml per la tabella HTML
Vedere ['Benchmark'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html). –