Тайфус драгоценный камень не сокращает время отклика - PullRequest
1 голос
/ 01 декабря 2011

В основном у меня 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.

1 Ответ

0 голосов
/ 28 декабря 2011

Как вы и подозревали, вам непременно захочется провести сравнительный анализ, используя тот же метод HTTP.HEAD-запросы, как правило, возвращаются намного быстрее, чем GET-запросы.

Если наличие нескольких ложных срабатываний не нарушает условия сделки, вы можете попробовать уменьшить время ожидания соединения / ответа.Если точность имеет первостепенное значение, уменьшите максимальный параллелизм (попробуйте 10-15) и воспользуйтесь Typhoeus::Request#on_complete для обработки кода состояния HTTP.

...