2013-03-16 2 views
2

Я хочу проанализировать некоторые сложные/тяжелые HTML-страницы. Недавно я прочитал о CsQuery и проверил сравнение производительности CsQuery Vs Html Agility Pack and Fizzler. Согласно этим тестам, CsQuery становится медленнее при создании DOM из-за его создания индекса.Ускорение селекторов CsQuery с помощью подстроки html

Предположим, я хочу выбрать определенный элемент (без id) тяжелой html-страницы, и я знаю идентификатор его предка, который я буду использовать в качестве элемента контекста. Если я загружу этот тяжелый html в DOM, он будет медленным, поэтому мой выбор будет медленным. Тем не менее, если я могу ПОСЛЕДОВАТЕЛЬНО предварительно обработать html и получить подстроку, содержащую элемент контекста (какой идентификатор я знаю), и загрузить его в DOM, он будет быстрее. В этом случае я бы избавился от большого количества ненужного HTML, для которого индексы не будут созданы. Поэтому мой выбор будет быстрее.

Я использую CsQuery, потому что я хочу что-то похожее на JQuery.

Мой вопрос:

Дано документ строку HTML: Есть ли быстрый способ (например: линейный), чтобы получить HTML подстроку из HTML-элемента с учетом его идентификатор?

+0

Вы могли заставить мое предложение работать? –

ответ

2

Прежде всего позвольте мне сказать, что я думаю, что вы сделали правильный выбор с CsQuery, я переключился с HAP на некоторое время назад, и я не мог быть более счастливым с коммутатором. Новейший предварительный выпуск CsQuery позволяет полностью отключить индексирование или только частичную индексацию вашего кода.

Из трекера проблемы.

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

Если вы готовы загрузить код из своего git-hub хранилища и скомпилировать его, работая с предварительной версией, вы будете в состоянии сделать это.

DomIndexProviders класса содержит 3 вариант, RangedDomIndexProvider индексов которых много селекторов и очень умный SimpleDomIndexProvider, который позволяет работать индексирование и NoDomIndexProvider, который не делает индексацию на всех. SimpleDomIndexProvider очень прост и может работать в вашем случае, вы также можете рассмотреть no indexing.

+2

Новая версия с этой функцией также доступна на NuGet сейчас, если вы включили прелеазы http://www.nuget.org/packages/CsQuery/1.3.5-beta3 –

+0

^Автор CsQuery –

Смежные вопросы