如何管理用于API Rails的变量/实例变量

问题描述 投票:0回答:1

我有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。抱歉,如果我的措辞/代码不明确,我会说错了

ruby-on-rails ruby variables memory-management code-readability
1个回答
0
投票

经验法则是不创建实例变量并使用局部变量,除非要从另一个方法中重用变量(现在可以认为这不是最佳实践)。

无论如何,如果您的代码要重用该变量,那么它就是实例变量,因为局部变量将在方法返回后被垃圾收集,并且通常无法从范围外部访问。

那说以下代码有效:

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

但是,它对内存消耗的影响非常小。实例变量永远不是瓶颈(当然除非它是千兆字节),并且不会承诺在将范围留给局部变量之后立即发生垃圾收集。

© www.soinside.com 2019 - 2024. All rights reserved.