¿Sigue siendo el Html Agility Pack el mejor analizador de .NET HTML?

.net c# html html-agility-pack parsing

Pregunta

Html Agility Pack se dio como respuesta a una pregunta de StackOverflow hace algún tiempo, ¿sigue siendo la mejor opción? ¿Qué otras opciones deben ser consideradas? ¿Hay algo más ligero?

Respuesta aceptada

Hay una hoja de cálculo con las comparaciones.

En resumen:

CsQuery Performance vs. Html Agility Pack y Fizzler Reuní algunas pruebas de rendimiento para comparar CsQuery con la única alternativa práctica que conozco (Fizzler, una extensión HtmlAgilityPack). Probé contra tres documentos diferentes:

  • El documento de prueba de chisporroteo (alrededor de 11 k)
  • La entrada de wikipedia para "queso" (alrededor de 170 k)
  • La especificación HTML 5 de una sola página (aproximadamente 6 megabytes)

Los resultados generales son:

  • HAP es más rápido al cargar la cadena de HTML en un modelo de objeto. Esto tiene sentido, ya que no creo que Fizzler construya un índice (o quizás construya solo uno relativamente simple). CsQuery tarda de 1.1 a 2.6 veces más en cargar el documento. Más sobre esto a continuación.
  • CsQuery es más rápido para casi todo lo demás. A veces por factores de 10.000 o más. La única excepción es el selector "*", donde a veces Fizzler es más rápido. Para todas las pruebas, los resultados están completamente enumerados; este caso solo da como resultado que cada nodo en el árbol sea enumerado. Así que esto no prueba tanto el motor de selección como la estructura de datos.
  • CsQuery hizo un mejor trabajo al devolver los mismos resultados que un navegador. Cada uno de los selectores aquí se verificó con el mismo documento en Chrome utilizando jQuery 1.7.2, y los números coinciden con los devueltos por CsQuery. Esto probablemente se deba a que HtmlAgilityPack maneja las etiquetas opcionales (faltantes) de manera diferente. Además, nth-child no se implementa completamente en Fizzler, solo admite valores simples (no fórmulas).

Respuesta popular

Cuando se trata de análisis de HTML, no hay comparación con lo real. Este es un puerto C # del analizador validator.nu . Esta es la misma base de código utilizada por los navegadores basados ​​en Gecko (por ejemplo, Firefox). El repositorio se ve un poco polvoriento pero no te dejes engañar ... el puerto es excepcional. Sólo se ha pasado por alto. Lo integré en CsQuery hace aproximadamente un mes. Pasa todas las pruebas de CsQuery (que incluyen la mayoría de las pruebas de jQuery y Sizzle portadas a C #).

No tengo conocimiento de ningún otro analizador de HTML5 escrito en C #, o incluso de cualquier otro que se acerque remotamente a hacer un buen trabajo en términos de manejo de etiquetas faltantes, opcionales e inválidas. Sin embargo, esto no solo hace un gran trabajo, sino que cumple con las normas.

El repositorio al que he vinculado anteriormente es el puerto original, incluye un contenedor básico que produce un árbol de nodos XML. Las versiones 1.3 y posteriores de CsQuery utilizan este analizador.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué