我遇到了一个令人困惑的问题
我获取了一些记录,并递归地选择了他们自己的相关记录。这是相当快的,但是当我返回数据时,即使在完成所有计算/过滤之后,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。这条记录存储了一个相当大的序列化字段,可能是原因?
有什么建议吗?
答案 0 :(得分:2)
看来你在IRB中这样做了。 IRB必须在结果上调用.inspect
来打印它,在这种情况下,它可能需要一段时间才能在大字段上进行检查,并且需要一段时间才能将其写入控制台。