Я использую инструменты на основе webkit для создания браузера без браузера для обхода веб-страниц (мне нужно это, потому что я хотел бы оценить javascript, найденный на страницах, и получить окончательную отображаемую страницу). Но две разные системы, которые я реализовал до сих пор, демонстрируют очень низкую производительность. Я реализовал две разные системы, каждая из которых использует webkit в качестве бэкэнд:
- Использование Google Chrome: я бы запустил Google Chrome и общался с каждой вкладкой с помощью веб-сайтов, открытых Chrome для удаленной отладки (отладки через провод). Таким образом, я могу управлять каждой вкладкой, загружать новую страницу и после загрузки страницы. Я извлекаю DOM загруженной веб-страницы.
- Используя phantomjs: phantomjs использует webkit для загрузки страниц и предоставляет возможность просмотра безглавых браузеров. Как объясняется в примерах phantomjs, я использую page.open, чтобы открыть новый URL-адрес, а затем получить dom, как только страница будет загружена путем оценки javascript на странице.
Моя цель - обходить страницы так быстро, как я могу, и если страница не загружается за первые 10 секунд, объявите ее недействительной и перейдите к ней. Я понимаю, что для загрузки каждой страницы требуется некоторое время, поэтому для увеличения количества загружаемых страниц в секунду я открываю много вкладок в Chrome или запускаю несколько параллельных процессов с использованием phantomjs. Ниже приведена производительность, которую я наблюдаю:
- Если я открою более 20 вкладок в экземплярах Chrome/20 phantomjs, загрузка процессора начнется.
- Из-за большого использования ЦП много страниц занимает больше 10 секунд для загрузки, и, следовательно, у меня более высокий уровень отказов (80% запросов на загрузку страницы не работают)
- Если я намерен сохранить не менее 5% от общего количества запросов, я не могу загрузить более 1 URL в секунду.
После тестирования обеих систем на основе webkit, похоже, что узким местом производительности является механизм рендеринга webkit и, следовательно, хотелось бы понять от других пользователей здесь количество URL-адресов в секунду, которое я могу ожидать для обхода. Моя конфигурация оборудования:
- Процессор: Intel® Core ™ i7-2635QM (1 процессор, 4 ядра).
- Видеокарта: AMD Radeon HD 6490M (256 МБ)
- Память: 4 ГБ
- Полоса пропускания сети достаточно хороша, чтобы загружать страницы больше, чем производительность, которую я наблюдаю.
Вопрос, который я пытаюсь задать в этом списке рассылки, заключается в том, что у кого-то есть опыт использования webkit для обхода веб-страниц для случайного набора URL-адресов (например, выбор 10k URL-адресов из потока twitter), сколько URL-адресов я могу разумно ожидать сканирование в секунду?
Спасибо