코드의 성능을 향상시키고 자하는 방법에서이 모델과 다음 행을 사용하고 있습니다. 방법에서루비 - ".each"배열을 통해 루핑 속도를 높이는 방법?
class Location < ActiveRecord::Base
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :locations
end
:
locations_company = []
###
found_locations = Location.within(distance, origin: from_result.split(',')).order("distance ASC")
### 0.002659s
###
found_locations.each do |location|
locations_company << location.company
end
### 45.972285s
###
companies = locations_company.uniq{|x| x.id}
### 0.033029s
코드는이 기능을 갖는다 - 먼저, 소정 반경 내의 모든 위치를 잡아. 그런 다음 각 행에서 회사를 인수하여 준비된 배열에 저장하십시오. 이것은 문제가되는 부분입니다. 각 루프는 처리하는 데 45 초가 걸립니다.
그런 다음 새로 생성 된 배열에서 중복을 제거하십시오.
이 상황을 해결하기위한 더 좋은 방법이 있을지 궁금하지만 지금 당장은 보지 못한다. 그래서 나는 너희들에게 내가 어떻게 .each
과 함께 루핑을 할 수 있는지 물어보고 싶다. 데이터를 배열에 저장하는 것 - 루비에서 객체의 일부 정보를 가져 오는 더 나은 방법이 있습니까?
시간 내 주셔서 대단히 감사합니다. 하루 종일이 문제에 몰입하고 있지만 여전히 효과적인 해결책이 없습니다.
'found_locations'를 보면 가능성이있는 쿼리 프록시이고 통합 된 결과 집합이 아님을 알 수 있습니다. '# each'는 거의 확실하게 병목 현상이 아닙니다. 병목 현상을 찾으려면 코드를 올바르게 프로파일해야합니다. –
이 질문은 리팩토링 및 기존 코드의 성능 향상을위한 것이므로 주제가 아닌 것으로 보입니다. [codereview.se]에 있어야합니다. –