2011-11-30 7 views
1

기본적으로 확인해야 할 이미지 링크가 857 개 있습니다. 3 가지 방법으로 구현하고 각각 3 번 실행합니다.Typhoeus gem 응답 시간을 단축하지 않습니다

방법 1 : Typhoeus 히드라 사용 (병렬 요청)

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 : 사용 시간 촬영

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" 

순 :: HTTP 루비 라이브러리 : 83.30, 67.62, 75.26 초

처음

생각 방법 1 : Typhoeus와 히드라는에 생각한다 한 번에 하나씩 보내는 대신 병렬 요청을 보내 Http 응답 시간을 단축하십시오. 그러나 위의 결과는 실제로 응답 시간이 느려짐을 보여줍니다.

헤더에 대한 HTTP 요청이 일반적인 http GET 요청보다 적은 오버 헤드를 가질 수있는 한 가지 이유가 있습니다. 그 외에 내가 여기서 뭔가 잘못하고있는거야? 이 프로세스를 최적화하는 데 도움이 필요하면 http 상태 코드를 검색하면됩니다.

답변

0

의심 스럽지만 동일한 HTTP 메소드를 사용하여 벤치 마크를하고 싶을 것입니다. HEAD 요청은 GET 요청보다 훨씬 빨리 반환됩니다.

가양 성이 약간이라도 deal-breaker가 아니라면 연결/응답 시간 초과를 낮추십시오. 정확도가 가장 중요한 경우 최대 동시성 (10-15 시도)을 낮추고 Typhoeus::Request#on_complete의 이점을 활용하여 HTTP 상태 코드 처리를 수행하십시오.

관련 문제