6

以外のコントローラーでは何も起こらず、HTML 以外のビューでも何も起こらないため (両方の場所ですべての Ruby コードをコメントアウトしました)、ページの読み込みに 5 秒以上かかります。render 'mypage'

Completed 200 OK in 6258ms (Views: 5283.2ms | ActiveRecord: 14.6ms)

これを改善またはプロファイルする方法について何か提案はありますか? 私が遭遇したすべての「解決策」は、私には何の効果もありません。Rails-dev-tweaks は影響を与えません。アセットのデバッグ フラグを変更しても効果はありません。実際、これはすべて、アセットが要求される前に行われると信じています。

更新1450 年 5 月 7 日

こんにちは - 返信ありがとうございます。これをアセットに絞り込んだと言って始めましょう約半ダースの gem とすべてのアセットを削除すると、ページの読み込み時間が最初の読み込みで 1.3 秒に短縮され、リロードは最大 150 ミリ秒になりました。素晴らしい。したがって、私の問題は、 rails-dev-tweaks のような宝石を適切に構成してそれを実現する方法です。適切な構成が見つからないようです。おそらく 100 ほどのアセットがあり、それより少し多いかもしれません。

あなたの質問に答えるには: 残念ながら、ビューをコピーして貼り付けることはできません。ただし、約 100 行の HTML、10 行の JavaScript、およびおそらく 30 行の HTML に Ruby コードが含まれていると言えば十分ですが、すべての Ruby をコメントアウトしました。

ruby-prof を試してみました - 本当に役に立つものは何もありませんでした

外部 HTTP リクエストは行われていません

ApplicationController には before_filter がありますが、それをコメントアウトしても大きな違いはありませんでした。

Mac OS X 10.8 で開発しています

Rails 3.2.13を使用しています

アセットがまったくない場合: 最初のページの読み込み:

Completed 200 OK in 3418ms (Views: 1414.9ms | ActiveRecord: 74.6ms)

ページの更新:

Completed 200 OK in 140ms (Views: 120.8ms | ActiveRecord: 2.8ms)

興味深いことに、rails -v読み込みに 4 秒かかります。

ruby-1.9.3-p327@aidin ± time rails -v
    Rails 3.2.13
    rails -v  4.10s user 0.24s system 92% cpu 4.679 total

更新 2 1450 年 5 月 7 日

New Relic によると、Rails の依存関係 (実際には ActionPack の依存関係) であると思われる Journey 自体に、途方もない時間がかかっています。

                  Metric    Timestamp (s)   Duration (ms)   Exclusive (ms)
DashboardController#show    0.001           2,652           1917

詳細ページには、次のファイルが表示されます。

journey-1.0.4/lib/journey/router.rb

そして、この行:

        status, headers, body = route.app.call(env)

更新 3 5 月 7 日 @ 1509

さらに調査すると、すべてのアセットを削除するだけでなく、すべての gem を削除すると、応答時間が許容範囲内の最大 150 ミリ秒に短縮されることがわかりました。宝石を元に戻すと、800ms から 1500ms に移動します。明らかに、それらだけで問題を引き起こしている何かが起こっています。

どのgemが問題を引き起こしているかを特定できると思う人がいれば、喜んでGemfileを投稿します

4

3 に答える 3

0

そのため、ロード時間は、多くの場合、アセットのロードまたは SQL リクエストの発生の結果です。

まず、アセットから始めましょう:

Rails アプリでよくある間違いの 1 つは、開発者が必要以上に多くのアセットを読み込んでいることです。あなたができるいくつかのトラブルシューティングは、application.jsapplication.cssにあります//= require_tree .。これにより、assets/stylesheets および assets/javascripts の下にあるすべてのアセットが読み込まれます。

次に、SQL クエリを減らします

コントローラー (!)、モデル、または場合によってはビューで実行されている多くの SQL クエリがある場合があります。これらは、クエリを完了するためにデータベースに絶えずバウンスするため、ページの読み込み時間が大幅に遅くなります。

別のヒント:

use Rack::Deflater/config.ru に追加して、ページの読み込み時に gzip のような圧縮を実行できます。これにより、ページの速度が向上しました。

最後のヒント:

アプリケーションで使用する gem の量を減らすようにしてください。それらの多くは時間を節約できる可能性がありますが、それぞれのアセットをロードするためにより多くの HTTP リクエストが必要になります。ほとんどの場合、独自のコードでそれらの機能を複製できます。

わかりました... もう1つ

本番用のアセットを最小限に抑えるようにしてください。これにより、空白が削除されて行数が減るため、ブラウザーがコードをスキャンする時間が短縮されます。

これらが役立つことを願っています!

于 2013-05-07T18:51:35.513 に答える
0

この質問はおそらく長い間放棄されていますが、これは /etc/hosts の問題である可能性が最も高いです。URL バーの 127.0.0.1 は通常は機能しますが、常にそうであるとは限らないことに気付きました。

設定をいじる前に、ネットワークを切断して、それが役立つかどうかを確認してください。その場合は、/etc/hosts を編集する必要があります。次の行があることを確認してください。

127.0.0.1        localhost
于 2018-03-26T02:44:21.943 に答える