1

私は Web プログラミングの初心者で、今日 Rails のチュートリアルに従っているときに、インターネット上で答えが見つからない質問を思いつきました。

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 に答える