我有2种代码方式,但我不知道哪种方式更适合内存。
def create
user = User.find(params[:id])
address = nil
user.transaction do
address = user.address.create!(params[:address_params])
end
render json: user, address
end
要么
def create
@user = User.find(params[:id])
@user.transaction do
@address = user.address.create!(params[:address_params])
end
render json: @user, @address
end
在这种情况下,我会选择第二个。但是我的同事担心第一个是内存最优选择,如果回调就像after_action @instance_variable一样,直到after_action完成后才会返回内存
所以我想要哪一个更好,怎么样。谢谢ps。抱歉,如果我的措辞/代码不明确,我会说错了
经验法则是不创建实例变量并使用局部变量,除非要从另一个方法中重用变量(现在可以认为这不是最佳实践)。
无论如何,如果您的代码要重用该变量,那么它就是实例变量,因为局部变量将在方法返回后被垃圾收集,并且通常无法从范围外部访问。
那说以下代码有效:
class Foo
def initialize
@bar = 42
end
def calc
@bar / 2
end
end
Foo.new.calc
而以下一个提出:
class Foo
def initialize
bar = 42
end
def calc
bar / 2
end
end
Foo.new.calc
但是,它对内存消耗的影响非常小。实例变量永远不是瓶颈(当然除非它是千兆字节),并且不会承诺在将范围留给局部变量之后立即发生垃圾收集。