对象数组比字符串数组慢得多

时间:2013-08-12 16:07:17

标签: ruby-on-rails ruby

使用Ruby on Rails 3.2。我有以下方法迭代关联以查找是否存在照片:

  # Method 1
  def trip_photos
    if (photos = trip_days.map(&:spots).flatten.map(&:photos).flatten.map)
      photos.each do |photo|
        photo.url(:picture_preview)
      end
    end
  end
  # >> ['picture_1.jpg', 'picture_2.jpg']

  # Method 1 view
  @object.trip_photos.each do |photo|
    photo
  end


  # Method 2
  def trip_photos
    if (photos = trip_days.map(&:spots).flatten.map(&:photos).flatten.map)
      photos.each do |photo|
        photo
      end
    end
  end
  # >> [photo_object_1, photo_object_2]

  # Method 2 view
  @object.trip_photos.each do |photo|
    photo.data.url(:picture_preview)
  end
  1. Method 1需要30毫秒才能执行; Method 2需要400毫秒才能执行。有什么理由吗?

  2. 我更希望Method 2因为我可以从photo获取更多数据而不仅仅是网址,但它存在性能问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

正如Mr.Yoshiji所说,你可以重构你的请求,以尽量减少数据集的循环。

改进方法1&&方法2:您可以避免上一次mapeach调用,只需将集合作为flatten

给出的数组返回
# Method 2
def trip_photos
  if (photos = trip_days.map(&:spots).flatten.map(&:photos).flatten)
    photos
  end
end
# >> [photo_object_1, photo_object_2]