QA@IT

Railsのdevelopment環境でのassets表示速度について

5356 PV
  • Rails 4.1.6
  • Ruby 2.1.3
  • Mac 16GB Memory

上記環境で開発中なのですが、下記のassets表示部分が開発用のThinサーバ起動後から徐々に遅くなります。
rack-mini-profilerでの計測は以下の通りです。

  Rendering: common/_head   22.3    +13980.0    
      Rendering: common/_meta   8.8 +13982.0    
      Rendering: common/_assets 11952.6 +13994.0    
     Rendering: common/_header  18.0    +25974.0

common/_assetsの表示で11952.6msもかかってしまいます(サーバ起動直後は2000ms程度)。
common/_assetsはただのパーシャルで内容は、標準の通りです。

= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'application', 'data-turbolinks-track' => true

productionでコンパイルされたCSS, JSファイルのサイズは以下の規模です。

  • CSS: 259KB
  • JS: 307KB

この程度の規模での、development環境におけるassetsの表示処理速度はこの程度なのでしょうか?
Gemの利用などで表示速度改善など、開発時の工夫などがあれば、
ご教授いただければと思っています。

その他、参考の情報として、以下にモデル数等を記載します。

config/environment/development.rb

  config.cache_classes = false
  config.eager_load = false
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.active_record.migration_error = :page_load
  config.assets.debug = true
  config.assets.raise_runtime_errors = true
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  2788 |  2364 |      52 |     335 |   6 |     5 |
| Helpers              |   255 |   196 |       0 |      34 |   0 |     3 |
| Models               |  3174 |  1665 |      71 |      63 |   0 |    24 |
| Javascripts          |  1927 |  1432 |       0 |     169 |   0 |     6 |
| Libraries            |   217 |   135 |       7 |      16 |   2 |     6 |
| Mailer tests         |    79 |    62 |       5 |      16 |   3 |     1 |
| Controller specs     |  2568 |  2111 |       0 |       0 |   0 |     0 |
| Feature specs        |   735 |   546 |       0 |       0 |   0 |     0 |
| Lib specs            |    64 |    48 |       0 |       0 |   0 |     0 |
| Model specs          |  1823 |  1298 |       0 |       0 |   0 |     0 |
| Policy specs         |    81 |    60 |       0 |       0 |   0 |     0 |
| Routing specs        |    27 |    22 |       0 |       0 |   0 |     0 |
| Service specs        |   295 |   251 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 14033 | 10190 |     135 |     633 |   4 |    14 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 5792     Test LOC: 4398     Code to Test Ratio: 1:0.8

回答

参考までに、だいたい同規模 (JS: 316kb/100files, CSS: 179kb/54files) のアプリケーションがあったので試してみましたが、該当箇所のレンダリングにかかる時間は、初回アクセスでは 800ms、2 回目以降は 50ms くらいでした (ruby 2.1.0, rails 4.0.1, OSX 10.9.5, Core i7 2.2Ghz)。

まずは問題のスコープを狭めることが必要かと思います。

  1. stylesheet_link_tagjavascript_include_tag を、それぞれ、あるいは両方コメントアウトしてパフォーマンスの変化を見る
  2. application.{js|css} で require するファイルを減らしていってパフォーマンスの変化を見る

などすると、もう少し精度よく原因を推測することが可能になると思います。

編集 履歴 (0)
  • 回答頂き、ありがとうございます。返信遅くなりました。
    いくつかasset_pathを削っても、平均的に削った分だけレスポンスが減るので、gem 'autoprefixer-rails'を削除してみました。
    すると、2000ms程度に落ち着きました(現在の所)。labochoさんの規模より小さいのに圧倒的にレスポンスが遅いみたいなので、気になるところですが・・・gem周りかな。
    ありがとうござ
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。