2017-04-12 5 views
0

에서 긁어 속도를하지만, Heroku가에 의한 요청 제한 시간에 30 초 이상 걸리는 :방법이 코드는 로컬에서 잘 작동 레일

if @url 
    @arr = Array.new 
    begin 
    doc = Nokogiri::HTML(open(@url)) 
    doc.css(".new-cars-results-box").each do |item| 
     hash = Hash.new 

     type = item.at_css(".new-car-name").text 
     link = "http://uae.yallamotor.com"+item.at_css(".new-car-name")[:href] 
     @arr << [link,type] 
    end 
    rescue 
    end 

end 

가 어떻게이 속도를 높일 수 있습니다?

+0

코드가 최적이 아니지만 더 느리게 실행되도록하는 코드는 없습니다. 나는 당신의 환경이 Heroku에 관한 문제라고 제안합니다. "[mcve]"와 링크 된 페이지를 읽으십시오. 우리는 당신이 파싱하는 것을 추측하도록 요청하고 있으며, 이는 처리 속도에 직접적인 영향을 줄 수 있습니다. 맨손으로'구조 '를하는 것은 좋은 습관이 아니지만 다시는 속도에 영향을 미치지 않아야합니다. (예외를 무시하고 있는지 확인하기 위해'rescue' 메시지를 출력하십시오.) –

+0

또한 Nokogiri는 어느 위치에서나 같은 속도로 실행되지만'open'은 그렇지 않을 수도 있습니다. 'open '은 Nokogiri의 일부가 아니며, Nokogiri가 페이지 내용을 얻기 위해 읽는 파일 핸들 만 전달합니다. 해당 파일 스트림을 여는 데 시간이 오래 걸리거나 천천히 데이터를 먹이는 경우 Nokogiri가 처리를 시작할 때까지 어느 정도 시간이 걸릴 수 있지만 Nokogiri는 그 지연에 책임이 없습니다. –

답변

0

당신은 DOM 2 번 그냥 모든 '.new를 차 이름'에 대해 한 번 조회 할 수있는 결과 상자를 조회하고,이 시도 각각 쓸모 해시에 대한

을 만드는 :

if @url 
    @arr = Array.new 
    begin 
    doc = Nokogiri::HTML(open(@url)) 
    url_prefix = 'http://uae.yallamotor.com' 
    doc.css(".new-cars-results-box > .new-car-name").each do |item| 
     type = item.text 
     link = url_prefix + item[:href] 
     @arr << [link,type] 
    end 
    rescue 
    end 
end 

또한이와 함께이 라인

doc.css(".new-cars-results-box > .new-car-name").each do |item| 

를 교체하려고 :

doc.css(".new-car-name").each do |item| 
+0

이것은 파싱을 정리하는 동안 30 초 델타를 수정할 수있는 코드의 런타임 속도에는 영향을 미치지 않습니다. –