¿Alguien me aclarará alguna comparación de rendimiento integral entre XPath y DOM en diferentes escenarios? He leído algunas preguntas en SO, como xPath vs DOM API, which one has a better performance y XPath or querySelector?. Ninguno de ellos menciona casos específicos. Aquí hay algunas cosas con las que podría empezar.Rendimiento de XPath vs DOM
- Ninguna iteración involucrada. getElementById (foobar) vs // * [@ id = 'foobar']. ¿El primero es constantemente más rápido que el segundo? ¿Qué sucede si este último está optimizado, p./html/body/div [@ id = 'foo']/div [@ id = 'foobar']?
- Iteración involucrada. getElementByX luego recorre los nodos hijos frente a XPath y genera una instantánea, luego recorre los ítems de la instantánea.
- eje involucrado. getElementByX luego transversal para los próximos hermanos vs // following-sibling :: foobar.
- Diferentes implementaciones. Los diferentes navegadores y bibliotecas implementan XPath y DOM de forma diferente. ¿Qué implementación de navegador de XPath es mejor?
Como dice la respuesta en xPath vs DOM API, which one has a better performance, el programador promedio puede equivocarse al implementar tareas complicadas (por ejemplo, varios ejes involucrados) en modo DOM mientras se garantiza la optimización de XPath. Por lo tanto, mi pregunta solo se preocupa por las selecciones simples que se pueden hacer de ambas maneras.
Gracias por cualquier comentario.
Como con casi cualquier pregunta sobre el rendimiento y la optimización, dependerá de sus circunstancias y contenido específicos. La respuesta es "perfila tu aplicación con tus datos, y elige la que sea más adecuada para ti". Además, has hecho demasiadas preguntas generales. Esto probablemente debería cerrarse como "no es una pregunta real", y si alguien más piensa, me uniré a ellos para votar. –
Mi experiencia personal es que DOM suele ser más de 10 veces más rápido que XPath o la implementación de selector API (por ejemplo, Firefox).Sin embargo, dado que XPath acepta el nodo de contexto, tal vez sea mejor seleccionar un nodo padre "estable" con DOM y usar XPath para el trabajo de descanso. Esto puede ser de alto rendimiento y robusto. –
XPath se puede construir en una API que no sea DOM, por ejemplo, la implementación xpath de vtd-xml se basa en descriptores de token virtuales ... –