基本上我有 857 个图片链接要检查。我用 3 种不同的方法实现了它,每个方法运行 3 次。
方法一:使用 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 秒
方法二:使用 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 响应时间。然而,上面的结果告诉我,我实际上得到了一个较慢的响应时间。
一个原因可能是对标头的 http 请求比普通的 http GET 请求具有更少的开销。除此之外,我在这里做错了吗?需要建议来优化这个过程,我只需要检索 http 状态码。