Производительность XPath против DOM - PullRequest
14 голосов
/ 12 марта 2011

Может ли кто-нибудь рассказать мне подробное сравнение производительности между XPath и DOM в различных сценариях?Я читал некоторые вопросы в SO, такие как xPath и DOM API, который имеет лучшую производительность и XPath или querySelector? .Ни один из них не упоминает конкретные случаи.Вот кое-что, с чего я мог бы начать.

  1. Никаких итераций не требуется.getElementById (foobar) vs // * [@ id = 'foobar'].Прежний постоянно быстрее, чем последний?Что если последний оптимизирован, например, / html / body / div [@ id = 'foo'] / div [@ id = 'foobar']? *
  2. Итерация включена.Затем getElementByX проходит через дочерние узлы, а XPath создает моментальный снимок, а затем проходит через элементы моментального снимка.
  3. Включена ось.getElementByX затем переходит к следующим братьям и сестрам против //following-sibling::foobar.
  4. Различные реализации.Различные браузеры и библиотеки по-разному реализуют XPath и DOM.Какая реализация XPath в браузере лучше?

В ответе xPath против DOM API, который имеет лучшую производительность , средний программист может испортиться при реализации сложных задач (например, задействовано несколько осей) способом DOM, в то время как XPath гарантированно оптимизирован.Поэтому мой вопрос касается только простых выборов, которые можно сделать обоими способами.

Спасибо за любой комментарий.

Ответы [ 3 ]

26 голосов
/ 12 марта 2011

XPath и DOM являются спецификациями, а не реализациями.Вы не можете задавать вопросы о производительности спецификации, только о конкретных реализациях.Между быстрым движком XPath и медленным существует разница как минимум в десять к одному: их можно оптимизировать для разных целей, например, некоторые тратят много времени на оптимизацию запроса, исходя из предположения, что он будет выполнен несколько раз, чтоможет быть неправильной вещью для выполнения одиночного выстрела.Одно можно сказать, что производительность XPath больше зависит от используемого вами движка, а производительность DOM больше зависит от компетенции прикладного программиста, поскольку это интерфейс более низкого уровня.Конечно, все программисты считают себя намного лучше, чем в среднем ...

4 голосов
/ 29 мая 2012

На этой странице есть раздел, где вы можете запустить тесты, чтобы сравнить их и увидеть результаты в разных браузерах.Например, для Chrome xpath на 100% медленнее, чем getElementById.

См. getElementById против QuerySelector для получения дополнительной информации.

0 голосов
/ 05 января 2012

Я согласен с Майклом, что это может зависеть от реализации, но я бы сказал, что DOM быстрее.Причина в том, что я не вижу способа оптимизировать анализируемый документ, чтобы ускорить XPath.

Если вы пересекаете HTML, а не XML, специализированный анализатор может индексировать все идентификаторы и классы вдокумент.Это сделает getElementById и getElementsByClass намного быстрее.

В XPath есть только один способ найти элемент этого идентификатора ... путем обхода сверху вниз или снизу вверх.Возможно, вы сможете запоминать повторяющиеся запросы (или частичные запросы), но я не вижу никакой другой оптимизации, которая могла бы быть сделана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...