基本上我有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响应时间。但是,上面的结果告诉我,事实上我的响应时间较慢。
一个原因可能是标头的http请求比普通的http GET请求具有更少的开销。除此之外,我在这里做错了吗?需要建议来优化这个过程,我只需要检索http状态代码。
答案 0 :(得分:0)
如您所料,您肯定希望使用相同的HTTP方法进行基准测试。 HEAD请求往往比GET请求更快地返回。
如果有一些误报不是交易破坏者,您可能想尝试降低连接/响应超时。如果准确性至关重要,请降低最大并发数(尝试10-15)并利用Typhoeus::Request#on_complete
进行HTTP状态代码处理。