1

我是网络编程的新手,今天在学习 Rails 教程时,我提出了一个问题,但在 Internet 上找不到答案。

我得出的结论是,在 Rails 中,对于与服务器的每个新连接,它都会创建我为该连接声明的类的新实例对象(控制器、模型......),但问题在于被调用类方法

我读过在 Ruby 中,静态方法不存在,它们是类的单例方法,但是如果有 1 000 000 个用户同时请求数学运算(如Math类方法一样)或某些操作我例如def User.encrypt,它不应该比我在一个对象(每个用户的一个对象)上调用它们慢,因为所有 1 000 000 个请求都被“询问”到同一个单例对象?

说我是从 Java 学习 OOP 并且我从来没有用 Ruby 编程过的,这可能有助于获得更好的答案:)

谢谢,

4

1 回答 1

3

正如@Powers 所暗示的,在Ruby 中,类方法只是类对象上的实例方法——性能应该与等效的实例方法相同。特别是在 Rails 中,许多类方法是在运行时动态生成的(例如find_by_*ActiveRecord 方法),因此类方法的性能可能有些不可预测。

对于类方法的并发访问问题,大多数 Rails 应用程序都是单线程的,因此永远不会并发访问相同的方法。在 Rails 中扩展到许多用户通常需要添加更多 Rails 应用程序实例并将它们放在负载均衡器后面,或者使用多线程服务器,例如Unicorn(实际上每个线程都有单独的 Ruby 环境)。

于 2013-08-03T19:08:27.953 回答