1

基本的に、チェックする857の画像リンクがあります。3つの異なる方法で実装し、それぞれ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は、一度に 1 つずつ送信するのではなく、並列リクエストを送信することで、HTTP 応答時間を高速化すると考えていました。ただし、上記の結果は、実際には応答時間が遅くなっていることを示しています。

1 つの理由として、ヘッダーの http 要求のオーバーヘッドが通常の http GET 要求よりも少ないことが考えられます。それ以外に、私はここで何か間違ったことをしていますか? このプロセスを最適化するためのアドバイスが必要です。http ステータス コードを取得する必要があるだけです。

4

1 に答える 1

0

ご想像のとおり、同じ HTTP メソッドを使用してベンチマークを実施することは間違いありません。HEAD リクエストは、GET リクエストよりもはるかに速く返される傾向があります。

いくつかの誤検知が問題にならない場合は、接続/応答のタイムアウトを短くしてみてください。精度が最重要である場合は、最大同時実行数を下げて (10 ~ 15 を試してください)、Typhoeus::Request#on_completeHTTP ステータス コード処理を利用してください。

于 2011-12-28T12:49:43.127 に答える