多数の周辺オブジェクトを使用して大きなactiverecordクエリを実行します。
「.includes」(プリロード)を追加すると、すべてのN + 1が潰れるため、劇的に高速化されます。
次に、ページは高速にレンダリングされ、これをログに吐き出します。
Completed 200 OK in 504ms (Views: 104.2ms | ActiveRecord: 86.0ms)
ただし、ページが実際にブラウザに送信されるまでは* 90秒*です(またはカール。両方でテスト済みです)。
その間、rubyプロセスのCPUは100%に固定されます。
「.includes」(プリロード)を削除すると、ページのレンダリングとブラウザの配信の間に何もないという1分半の隙間がなく、通常の安っぽいパフォーマンスに戻ります。
WTFは、プリロードによって後遺症が発生しますか?
ある同僚は、ガベージコレクションの問題を仮定しました。その理論をどのようにテストできますか?
Rails 3.2.12
Ruby 1.9.3(p286およびp327テスト済み)