Мне нужно как можно быстрее загружать множество маленьких страниц. Средний размер одной страницы - 3 КБ. Есть миллионы страниц. Сначала я попробовал curl
но это было слишком медленно, возможно потому, что он ждал, пока сервер ответит на запрос, а затем выполнил тот же процесс для следующей страницы.
curl -O "http://website.com/pages/[0000001-1000000].html"
Изменить: После выполнения некоторых тестов я наблюдал эти результаты. Я всегда открыт для большего количества предложений. Я хотел бы улучшить скорость еще больше.
Сравнение 1: (днс против нет днс)
помедленнее:
curl -O "http://website.com/pages/[1-1000].html" -s -S
Быстрее:
curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S
При загрузке большого количества маленьких страниц задержки DNS имеют решающее значение.
Сравнение 2: (с использованием последовательности curl против "seq")
помедленнее:
curl -O "http://90.111.123.222/pages/{1}.html" -s -S ::: $(seq 1 1000)
Быстрее:
curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S
Сравнение 3: (параллельное исполнение)
помедленнее:
time parallel -j 5 curl -O \'"http://90.111.123.222/pages/{1}.html"\'
-S -s ::: $(seq 1 1000)
Быстрее:
( time curl -O "http://90.111.123.222/pages/[1-200].html" -s -S &
time curl -O "http://90.111.123.222/pages/[201-400].html" -s -S &
time curl -O "http://90.111.123.222/pages/[401-600].html" -s -S &
time curl -O "http://90.111.123.222/pages/[601-800].html" -s -S &
time curl -O "http://90.111.123.222/pages/[801-1000].html" -s -S & )
Кстати, очевидно, что запуск большего количества экземпляров в некоторой степени улучшит скорость обоих методов.