Me gustaría saber si el análisis de Nokogiri XPath o CSS funciona más rápido con archivos HTML. ¿Cómo es la velocidad diferente?XPath o CSS analizando más rápido (para Nokogiri en archivos HTML)?
Respuesta
Nokogiri no tiene XPath o CSS que analiza. Analiza XML/HTML en un solo DOM que luego puede usar la sintaxis CSS o XPath para consulta.
Los selectores de CSS se convierten internamente en XPath antes de solicitar a libxml2 que realice la consulta. Como tal (para exactamente los mismos selectores) la versión de XPath sería una pequeña fracción más rápida, ya que el CSS no necesita convertirse primero en XPath.
Sin embargo, su pregunta no tiene una respuesta general; depende de lo que está seleccionando y de cómo se ve su XPath. Lo más probable es que no esté escribiendo el mismo XPath que crea Nokogiri. Por ejemplo, ver si se puede adivinar el XPath para las dos declaraciones CSS siguientes:
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 diferencia de un navegador Web, y id
class
atributos no tienen caché acelerada, por lo que seleccionar para ellos no ayuda. De hecho, la interpretación general de div.article
implica mucho más trabajo que algo como div[@class='article']
.
Como @LBg comentó, debe comparar con usted mismo si la velocidad absoluta es crítica.
Sin embargo, yo sugeriría esto: no se preocupe. Las computadoras son rápido. Escribe lo que sea más conveniente para ti, el programador. Si un selector de CSS es más fácil de crear, más rápido de escribir y más fácil de entender al revisar su código más tarde, use que. Use XPath cuando necesite hacer cosas que no puede hacer con la sintaxis del selector de CSS.
¿Cuánto tarda Nokogiri en convertir un CSS razonablemente complejo en 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
Menos de medio milisegundo.
Hmm, esa es exactamente la XPath que escribiría. :) El segundo usa la clase "truco" que debe usar al analizar un atributo de clase HTML, que puede tener múltiples valores separados por espacios. –
@Phrogz, "los selectores de CSS se convierten internamente en XPath antes de pedirle a libxml2 que realice la consulta. Como tal (para exactamente los mismos selectores), la versión de XPath sería una fracción más rápida, ya que no es necesario convertir el CSS en XPath primero." Se olvidó de permitir el tiempo de scratching de la cabeza tratando de recordar cómo escribir el acceso en XPath. :-) –
+1 para "no te preocupes por eso". Zactly! Más fácil de entender tiene beneficios a largo plazo en el mantenimiento del código. No me preocupa tanto el tiempo de la computadora, es mi tiempo tratando de entender lo que estaba escrito que me preocupa. –
- 1. Nokogiri xpath() 'o' operador?
- 2. ¿Qué es más rápido, XPath o Regexp?
- 3. ¿Cómo uso XPath en Nokogiri?
- 4. Nokogiri (Ruby) y XPath
- 5. RUBY Nokogiri CSS Análisis de HTML
- 6. Analizando documento HTML: ¿Expresión regular o LINQ?
- 7. jquery: ¿seleccionando xpath o convirtiendo xpath en css?
- 8. rubí Nokogiri contenido XPath get del nodo
- 9. HTML en Nokogiri
- 10. cómo utilizar métodos Nokogiri .xpath y .at_xpath
- 11. ¿Hay una biblioteca similar a lxml o nokogiri para Java?
- 12. Analizando reStructuredText en HTML
- 13. Analizando HTML en Python
- 14. Izquierda JOIN más rápido o Inner Join más rápido?
- 15. Nokogiri para obtener html en bruto de un nodo
- 16. Poner CSS y JavaScript en archivos o HTML principal?
- 17. Consulta del espacio de nombres Nokogiri/Xpath
- 18. ¿Hay algo más rápido que Jsoup para raspar HTML?
- 19. ¿Qué es más rápido EN O?
- 20. Acceso/almacenamiento de archivos más rápido?
- 21. Importar CSS o múltiples archivos CSS
- 22. ¿Cuál es el estilo de CSS más rápido/más eficiente
- 23. Analizando Scala y HTML
- 24. notepad ++ ¿Cómo indexar archivos para buscar más rápido?
- 25. Más rápido que os.walk o glob?
- 26. ¿Un archivo CSS o archivos CSS individuales para cada página?
- 27. Reemplazo más rápido para Regex
- 28. análisis de HTML con Nokogiri en Ruby
- 29. Búsqueda/análisis más rápido/seguro de archivos?
- 30. HTML + CSS + Javascript Editor
Ver ['Benchmark'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html). –