В основном у меня 857 ссылок на изображения для проверки. Я реализовал это тремя различными способами и запускал их по 3 раза каждый.
Метод 1: Использование Typhoeus и Hydra (Параллельные запросы)
hydra = Typhoeus::Hydra.new(:max_concurrency => 50)
st = Time.now
@image_urls.each do |image_url|
request = Typhoeus::Request.new(image_url)
hydra.queue(request)
end
hydra.run
et = Time.now
puts "\n" + (et - st).to_s() + " seconds"
Время: 117,65, 99,45, 102,01 секунды
Метод 2: Использование Typhoeus (Запрос единственного числа)
st = Time.now
@image_urls.each do |image_url|
response = Typhoeus::Request.head(image_url)
end
et = Time.now
puts "\n" + (et - st).to_s() + " seconds"
Время: 33,85, 31,89, 30,18 секунды
Метод 3: Использование библиотеки Net :: HTTP Ruby
st = Time.now
@image_urls.each do |image_url|
url = URI.parse(image_url)
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path).code
end
et = Time.now
puts "\n" + (et - st).to_s() + " seconds"
Время: 83,30, 67,62, 75,26 секунды
Изначально я думал, что Метод 1: Typhoeus и Hydra Предполагается ускорить время отклика Http, отправляя параллельные запросы вместо отправки 1 за раз. Тем не менее, приведенный выше результат показывает мне, что на самом деле я получаю более медленное время отклика.
Одной из причин может быть то, что запрос http для заголовка имеет меньшие издержки, чем обычный запрос HTTP GET. Кроме этого, я делаю что-то здесь не так? Нужен совет для оптимизации этого процесса, мне просто нужно получить код состояния http.