1

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

4

1 回答 1

0

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

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

于 2011-12-28T12:49:43.127 回答