我正在试图提高代码性能的方法中使用这些模型和以下行。Ruby - 如何加快循环遍历“.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
将数据保存到数组 - 是否有更好的方法在ruby中从对象中获取一些信息?
非常感谢您的时间,我一整天都沉浸在这个问题中,但仍然没有更有效的解决方案。
如果你看'found_locations',你会注意到它可能是一个查询代理,而不是一个合并的结果集。 '#each'几乎肯定不是你的瓶颈;你应该正确地分析你的代码来找到瓶颈。 – 2014-11-20 19:54:13
这个问题似乎是脱离主题,因为它是关于重构和提高现有代码的性能,应该在[codereview.se]上。 – 2014-11-20 22:25:44