gpt4 book ai didi

ruby-on-rails - 为什么 Rails 为每个请求创建一个 Controller ?

转载 作者:行者123 更新时间:2023-12-03 11:36:58 24 4
gpt4 key购买 nike

来自我之前的 question我知道 Rails 会为每个请求创建一个 Controller 实例。

我的问题是,因为这个主题与我正在从事的项目的设计有关:

为什么 Rails 会创建一个新的实例

class SomeController < ApplicationController; end

处理每个传入的请求?为什么不创建单例对象并将请求转发给这个对象?这似乎更有效,因为我们不会在为请求分配和清理对象上浪费资源?

最佳答案

实例化一个新的 Controller 实例的开销是微不足道的,这意味着两个完全不相关的请求之间不会意外共享状态。处理器时间的任何“节省”都将被产生破坏性错误的可能性所抵消。

请记住, Controller 用于存储特定于请求的状态。重用 Controller 需要您重置每个 @variable你会在每个 Action 开始时设置。否则,类似 @is_admin = true可能会结束并永远不会清除。您实际引入的不那么人为的错误会更加微妙,并且会消耗开发人员的时间。

您会看到没有优化的地方。有些东西必须保持状态并在请求之间重置它,否则你会遇到意外共享状态的噩梦。如果您在请求之间保留 Controller 实例,您只是将维护/重置状态的工作推到某个较低级别,答案可能仍然是为每个请求实例化某个状态管理类的新实例。计算机非常擅长分配和释放资源,所以在你真正知道这是一个瓶颈之前不要担心。在这种情况下,为每个请求实例化一个新 Controller 是正确的选择。

在 Rails 的情况下,可以使用 @variable = value从代码清晰度和可用性的角度来看,这是一个重大胜利,这或多或少需要在请求完成时丢弃 Controller 的每个实例。

关于ruby-on-rails - 为什么 Rails 为每个请求创建一个 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com