Как управлять, какую переменную / переменную экземпляра использовать для API Rails - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть 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 не завершит

, поэтому я хочу выбрать, какой из них лучше и как.Спасибо, пс.извините за мой плохой английский, если моя формулировка / код не ясен, я исправлю это

1 Ответ

0 голосов
/ 27 февраля 2019

Практическое правило заключается в том, что не нужно создавать переменные экземпляра и использовать локальные переменные , если только переменная не будет использоваться повторно в другом методе (который в настоящее время считается не лучшим решением).

В любом случае, если ваш код собирается повторно использовать переменную, это переменная экземпляра, поскольку локальные переменные будут собираться мусором после того, как метод вернет , а недоступны извнеобщей области действия .

При этом работает следующий код:

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

Он имеет оченьмало, если вообще не влияет на потребление памяти.Переменные экземпляра никогда не являются узким местом (если, конечно, это не гигабайты), и сборка мусора не обещается сразу же после того, как область действия была оставлена ​​и для локальных переменных.

...