私はコントローラの動作に10秒かかります。ほとんどの場合、大きなファイルであるビュー(1500行以上)に費やされています。スピードの問題をデバッグする方法は?Ruby on Railsのアプリケーション速度を向上させる
答えて
Iにあなたのビューのいくつかの小さな部分をラップすることをお勧めしますブロックとlog/development.logには遅い部分があります。
<% benchmark "Showing users" do %>
<!-- ... -->
<% end %>
<% benchmark "Performing some calculations" do %>
<!-- ... -->
<% end %>
最も良いケースは、90%の時間が費やされている場所がいくつか見つかります。その後、それらを使ってパフォーマンスを大幅に向上させることができます。
答えをありがとう。 – Srim
たとえば、NewRelicを試すことができます。私は数年前に無料版を使いました。あなたは全体のパフォーマンス、特に遅いコールはかなり良いことが分かりました。
私が覚えている限り、あなたは宝石をインストールし、いくつかのものを設定しなければならず、それは良いことです。
'newrelic'は、レールアプリのパフォーマンスを監視し改善するのに最適なツールです。 delopementモードで を使用すると、各ページの最新表示を絞り込むことができます。 –
RubyとRailsには、基本的なプロファイリングツールが用意されています。このレールガイド:を見てください。それがためにそれをしない場合は
rails profiler 'Ruby.code.to.run'
:ページでは、のような単純なことができた、パフォーマンスの低下を防ぐために、どのようにあなたがプロファイリングを行うことができ、テストケースは、ベンチマークのために意味書くことができる方法を説明し
あなたはNew Relicの使用を検討してください。しかし、私はRack-Bug(btw、それはRails 3 branchのRails 3を持っています)を見てみましょう。 Rack-Bugは、デバッグツールバーで、要求のどこで時間が費やされたかについての素晴らしい測定基準を提供し、通常のレスポンスと並んでブラウザでまっすぐに処理するので、最も苦労しません。
さて、何をやっていることは間違っている:
- あなたは
- あなたが遅いコードを避けるべきであるとして、脂肪ビュープロファイルに、テストするハード、ハードデバッグに及びにくい脂肪景色を、避けるべきです他のクライアントがWebサーバーにアクセスするのをブロックするため、そのロジックをすべて非同期ジョブキューに移動させます。
この処理をジョブキューに移動することを検討してください。 Delayed_jobはかなり信頼性が高く、適切に管理され、Rails 3で動作します。
あなたのビューは新しいジョブを登録して復帰します。仕事が終わったら、あなたはどこかで旗を立てます。その後、特別なAPI呼び出しを使用すると、数秒ごとにクライアントサイドのJavaScriptから完全性をチェックできます。そして、一度完了すると、結果を表示したり、Javascriptからダウンロードやその他のリダイレクトを開始したりできます。
上記のオプションがない場合(瞬間的なレポートを表示するページかもしれません)、SQLクエリが実行されることを考慮する必要がある最初のボトルネックは、MySQL's DESCRIBEコマンド(またはPostgreSQL's EXPLAIN )。索引が必要な場所を簡単に確認できます。
"Performance Testing Rails Applications"は、あなたのために修正された死んだリンクです:http://guides.rubyonrails.org/v3.2.13/performance_testing.html – GMA
NewRelicは、アプリケーションを分析する最善の方法です。
下記の点を考慮して、アプリケーションの高速化のためにコードを変更することができます。
- N + 1クエリ問題
- テストN + 1
- 入れ子イーガーローディング
- 間接イーガーローディング
- レールグループ化および集約演算
実際、次の回答の1つを受け入れました。だから私は何をしなければならない、私は各回答のコメントを追加する必要がありますか? – Srim
いいえ、受け入れる答えの横にある目盛りをクリックしてください。 –