Ускорение работы селекторов CsQuery с использованием подстроки html
Я хочу разобрать некоторые сложные / тяжелые страницы HTML. Недавно я прочитал о CsQuery и проверил сравнение производительности CsQuery Vs Html Agility Pack и Fizzler. Согласно этим тестам, CsQuery оказывается медленнее при создании DOM из-за создания индекса.
Допустим, я хочу выбрать определенный элемент (без идентификатора) тяжелой HTML-страницы и знаю идентификатор ее предка, который я буду использовать в качестве элемента контекста. Если я загружу этот тяжелый html в DOM, он будет медленным, поэтому мой выбор будет медленным. Однако, если я смогу SOMEHOW FAST предварительно обработать html и получить подстроку, содержащую элемент контекста (идентификатор которого я знаю), и загрузить его в DOM, это будет быстрее. В этом случае я бы избавился от множества ненужных HTML, для которых не будут созданы индексаторы. Поэтому мой выбор будет быстрее.
Я использую CsQuery, потому что я хочу что-то вроде JQuery.
Мой вопрос:
Заданная строка документа HTML: существует ли БЫСТРЫЙ ПУТЬ (например, линейный), чтобы получить подстроку HTML-элемента по его идентификатору?
1 ответ
Прежде всего позвольте мне сказать, что я думаю, что вы сделали правильный выбор с CsQuery, я перешел с HAP на него некоторое время назад, и я не мог быть счастливее с переключателем. Новейшая предварительная версия CsQuery позволяет полностью отключить индексацию или выполнять только частичную индексацию кода.
Из трекера проблем.
В текущем пререлизном коде есть альтернативная стратегия индексации, которую вы можете использовать, которая значительно ускоряет построение DOM за счет сложных запросов. (На самом деле есть две новые стратегии, вы можете вообще отключить индекс, если действительно хотите:) Это может быть лучше для тех сценариев, с которыми вы имеете дело.
Если вы хотите загрузить код из его репозитория git-hub и скомпилировать его, работая с предварительной версией, вы сможете сделать именно это.
Класс DomIndexProviders содержит 3 варианта, RangedDomIndexProvider
который индексирует много селекторов и очень умный SimpleDomIndexProvider
который позволяет базовую индексацию и NoDomIndexProvider
который не делает индексацию вообще. SimpleDomIndexProvider
Это очень просто и может работать в вашем случае, вы также можете рассмотреть вопрос об отсутствии индексации.