我是网络编程的新手,当我今天关注Rails教程时,我想出了一个我在互联网上找不到答案的问题。
我得出的结论是,在Rails中,对于服务器的每个新连接,它都会创建我为该连接声明的类的新实例对象(控制器,模型......),但问题是在被叫类方法。
中我在Ruby中读过,静态方法不存在,它们是类的单例方法,但如果有1 000 000个用户同时请求数学运算(Math
例如,有类方法)或我声明def User.encrypt
的一些操作,它不应该比我在一个对象(每个用户的一个对象)上调用它们要慢,因为所有1 000 000个请求都被“询问” “对同一个单身对象?
说我来自Java学习OOP而且我从未用Ruby编程可能有助于得到更好的答案:)
谢谢,
答案 0 :(得分:3)
正如@Powers所提到的,在Ruby类中,方法只是类对象上的实例方法 - 性能应该与等效的实例方法相同。特别是在Rails中,许多类方法是在运行时动态生成的(例如find_by_*
ActiveRecord方法),因此类方法的性能可能有些不可预测。
对于并发访问类方法的问题,大多数Rails应用程序都是单线程的,因此永远不会同时访问相同的方法。在Rails中扩展到许多用户通常需要添加更多Rails应用程序实例并将它们放在负载均衡器之后,或者使用多线程服务器,例如Unicorn(实际上每个线程都有单独的Ruby环境)。 / p>