基本的に、チェックする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 ステータス コードを取得する必要があるだけです。