Ответ 1
Накладные расходы на создание экземпляра нового контроллера незначительны, и это означает, что между двумя полностью несвязанными запросами нет случайно разделенного состояния. Любые "сбережения" в процессорном времени будут более чем компенсированы возможностью создания разрушительных ошибок.
Помните, что контроллеры предназначены для хранения состояния, специфичного для запроса. Для повторного использования контроллеров вам потребуется reset каждый @variable
, который вы когда-либо устанавливали, в начале каждого действия. В противном случае что-то вроде @is_admin = true
может быть установлено и никогда не очищается. Менее надуманные ошибки, которые вы фактически вводили, были бы намного более тонкими и истощались во время разработки.
Вы видите оптимизацию там, где их нет. Что-то должно поддерживать состояние и reset между запросами, или у вас есть этот кошмар случайного состояния. Если вы сохраняете экземпляры контроллера между запросами, вы просто нажимаете на то, чтобы сохранить/сбросить состояние до некоторого более низкого уровня, где, скорее всего, ответ будет заключаться в том, чтобы создать экземпляр нового экземпляра некоторого управляющего состояния класса для каждого запроса. Компьютеры очень хорошо выделяют и освобождают ресурсы, поэтому никогда не волнуйтесь об этом, пока вы на самом деле не узнаете это узким местом. В этом случае создание нового контроллера для каждого запроса легко является правильным выбором.
В случае с Rails возможность использования @variable = value
является основным выигрышем от точки четкости и удобства использования кода, и это более или менее требует отбрасывания каждого экземпляра контроллера, когда запрос завершается.