Производительность и версии XPath - PullRequest
0 голосов
/ 23 июня 2011

У меня 3 вопроса:

1) Является ли строка XPath "// table [position () = 8 или position () = 10] / td [1] / span [2] / text ()" быстрее, чем строка XPath "// table [ 8] / td [1] / span [2] / text () | // таблица [10] / td [1] / span [2] / text () "?

Я использую XPath с .NET CSharp и HTMLAgilityPack.

2) Как определить, какую версию XPath я использую. Если я использую XPath 1.0, как перейти на XPath 2.0?

3) Есть ли оптимизация и улучшение производительности в XPath 2.0 или только новые функции и новый синтаксис?

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

XPath 2.0 значительно расширяет возможности XPath 1.0 ( см. Краткую справку ), хотя вам не нужно переключаться, если только вы не воспользуетесь новой функциональностью.Один будет быстрее, я думаю, что первый будет быстрее, потому что вы повторяете поиск узлов во втором случае.Первый случай также более читабелен, и, в общем, вы все равно хотите использовать более читаемый.

1 голос
/ 23 июня 2011

Что касается вопроса производительности, боюсь, я не знаю. Это зависит от оптимизатора в конкретном процессоре XPath, который вы используете. Если это важно для вас, измерьте это. Если это не так важно, чтобы измерять, то это не так важно, чтобы беспокоиться.

Как я уже упоминал в моем предыдущем ответе, //table[8] пахнет неправильно для меня. Я думаю, что гораздо более вероятно, что вы хотите (//table)[8]. (Оба являются действительными выражениями XPath, но они дают разные ответы).

Вы, вероятно, можете предположить, что процессор является XPath 1.0, если в нем не указано иное - если он поддерживает 2.0, они захотят, чтобы вы знали. Но вы можете легко проверить, например, увидев, что происходит, когда вы делаете //a except //b.

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

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