Typhoeus gem不会减少响应时间

时间:2011-11-30 23:23:55

标签: ruby-on-rails httprequest hydra typhoeus

基本上我有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状态代码。

1 个答案:

答案 0 :(得分:0)

如您所料,您肯定希望使用相同的HTTP方法进行基准测试。 HEAD请求往往比GET请求更快地返回。

如果有一些误报不是交易破坏者,您可能想尝试降低连接/响应超时。如果准确性至关重要,请降低最大并发数(尝试10-15)并利用Typhoeus::Request#on_complete进行HTTP状态代码处理。