返回语句需要很长时间(无计算)

时间:2015-01-23 16:36:18

标签: ruby-on-rails ruby

我遇到了一个令人困惑的问题

我获取了一些记录,并递归地选择了他们自己的相关记录。这是相当快的,但是当我返回数据时,即使在完成所有计算/过滤之后,return语句也会在返回结果之前挂起一秒钟

  # recursively looks for succesful carrier product price on owner carrier products
  #
  def referenced_carrier_product_price
    start = Time.now
    puts "start"
    ancestors = CarrierProduct.find_carrier_product_ancestors(carrier_product_id: self.id).includes(:carrier_product_price).references(:carrier_product_price)
    puts "ancestors #{Time.now - start}"

    parent    = ancestors.select{ |cp| cp.id == self.carrier_product_id }.first
    puts "parent #{Time.now - start}"

    until parent.nil? || ancestors.empty?
      puts "check #{Time.now - start}"
      is_successful = parent.carrier_product_price.try('successful?')
      puts "is_successful #{Time.now - start}"
      price = parent.carrier_product_price
      puts "price #{Time.now - start}"

      return price if is_successful
      puts "CCP #{Time.now - start}"
      parent = ancestors.select{ |cp| cp.id == parent.carrier_product_id }.first
      puts "Loop parent #{Time.now - start}"
    end
    return
  end

下面我将显示输出到控制台

parent 0.003545
check 0.003572
is_successful 0.003609
price 0.003621

... 1 second later
=> #<CarrierProductPrice....

如您所见,所有计算都在0.003621完成,但我仍然会在一秒钟后得到结果

PS。这条记录存储了一个相当大的序列化字段,可能是原因?

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

看来你在IRB中这样做了。 IRB必须在结果上调用.inspect来打印它,在这种情况下,它可能需要一段时间才能在大字段上进行检查,并且需要一段时间才能将其写入控制台。