2009-03-26 8 views
9

私は自分のアプリケーションで「最適化」を行っており、レンダリングの最後に提供されているrails(バージョン2.2.2)の出力を理解しようとしています。ここでRuby on Railsのレンダリング時間の理解

は「古い」方法です:

Rendered user/_old_log (25.7ms) 
Completed in 466ms (View: 195, DB: 8) | 200 OK 

そして、「新しい」方法:

Rendered user/_new_log (48.6ms) 
Completed in 337ms (View: 192, DB: 33) | 200 OK 

これらのクエリがまったく同じであった、違いは古い方法は、ログファイルを解析しているあります新しい方法はデータベースログテーブルを照会することです。

ページの実際の速度は問題ではありません(ユーザーはこれが遅い要求であることを理解しています)...しかし、「遅い」ページであっても、ページはできるだけ早く応答します。

私の質問は、数字は何を表しているのですか?言い換えれば、速い方法とその理由はどちらでしたか?

答えて

14

この:

Rendered user/_old_log (25.7ms) 

だけ_old_log部分テンプレートをレンダリングする時間であり、ActionView::LogSubscriber

これによって処理されたばかりActiveSupport::Notificationから来ている:

Completed 200 OK in 466ms 

ですhttpステータスが返され、リクエスト全体の合計時間も返されます。それはActionController::LogSubscriberから来ます。また

、最後にそれらの括弧の項目に注意してください。

(Views: 124.6ms | ActiveRecord: 10.8ms) 

これらは、それぞれ、全体のビュー(パーシャル&すべて)と、すべてのデータベース要求をレンダリングするための合計時間であり、同様ActionController::LogSubscriberから来ます。

-1

あなたの新しいやり方は、全体的な時間が少なくて済みますが、テンプレートをレンダリングする時間が長くなります。

+0

これを自分で解釈する方法を細かく説明できますか? –

3

ジョーダンの回答は正しいです。言い換えれば、最初の数字はページが読み込まれるまでの時間です。 2つめは、ビューの生成に要した時間です。最後の数字は、データベースが送信したすべてのクエリをデータベースが処理するのにかかった時間です。

コントローラ番号とモデルコードの最初の数字から最後の2つの数字を引いた長さを見積もることもできますが、Benchmark.measureメソッド(http://www.ruby-doc.org/stdlib/libdoc/benchmark/rdoc/classes/Benchmark.html)を使用する方が良いでしょう。

コントローラ/モデル内のコードがより速く完了するため、新しい方法が改善されたようです。