ruby-on-rails – 为什么Rails为每个请求创建控制器?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 为什么Rails为每个请求创建控制器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从我之前的 question我了解到,Rails为每个请求创建一个控制器实例.

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

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

class SomeController < ApplicationController; end

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

解决方法

实例化一个新的控制器实例的开销是微不足道的,这意味着两个完全不相关的请求之间没有意外的共享状态.处理器时间的任何“储蓄”将被产生破坏性错误的潜力所抵消.

请记住,控制器用于存储特定于请求的状态.在每个动作开始时,重新使用控制器将要求您重置您设置的每个@variable.否则,像@is_admin = true这样的东西可能会卷起来,永远不会被清除.您实际引入的较少设计的错误在开发人员的时间上会更加微妙和耗尽.

您看到没有哪些优化.某些东西必须保持状态并在请求之间重新设置,否则你有这种偶然共享状态的噩梦.如果您在请求之间持有控制器实例,那么您只需将维护/重置状态的工作降低到较低级别,那么答案可能仍然是为每个请求实例化一些状态管理类的新实例.计算机非常擅长分配和释放资源,所以不要担心,直到你确实知道这是一个瓶颈.在这种情况下,为每个请求实例化一个新的控制器很容易是正确的选择.

在Rails的情况下,能够使用@variable = value是代码清晰度和可用性的一个主要优点,并且在请求完成时,这或多或少需要丢弃控制器的每个实例.

猜你在找的Ruby相关文章