Как управлять, какую переменную / переменную экземпляра использовать для API Rails
У меня есть 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 ответ
Практическое правило заключается в том, что нельзя создавать переменные экземпляра и использовать локальные переменные, если только переменная не должна быть повторно использована из другого метода (который в настоящее время, возможно, считается не лучшей практикой).
В любом случае, если ваш код собирается повторно использовать переменную, это переменная экземпляра, потому что локальные переменные будут собираться мусором после возврата метода и недоступны вне области видимости в целом.
Тем не менее, следующий код работает:
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
Тем не менее, он очень мало влияет на потребление памяти. Переменные экземпляра никогда не являются узким местом (если, конечно, это не гигабайты), и сборка мусора не обещается сразу же после того, как область действия была оставлена и для локальных переменных.