0

非常に高価なネストされたクエリを多数実行する Rails ビューがあります。私は重労働を遅延ジョブに投入し、キャッシュファイルを吐き出し、そのキャッシュを ajax でポーリングしようとしています。

私はこの種のことをかなり頻繁に行っていますが、通常は (ビュー全体ではなく) クエリをキャッシュします。この場合、SQL を書き上げて必要なものをすべて含めるには非常に長い時間がかかるため、部分的なテンプレート全体をdelayed_job にレンダリングするだけで済みます。

...そして、それが楽しみの始まりです。特にform_helpers、devise認証などに関連する多くのエラーが発生しています。要するに、次のいずれかについて何か提案はありますか?

  • 遅延ジョブで部分ビューをレンダリングする (またはアクションのレンダリングを返す) 簡単な方法は?
  • 上記を達成するための簡単な方法は、1 つの非常に複雑な SQL/ActiveRecord クエリを書き出すことはありませんか?

どんなアイデアでも大歓迎です - どうもありがとう。

4

1 に答える 1

2

まあ、ビュー自体を比較的簡単な方法でレンダリングすることは可能です。このチュートリアルを見てください。

ただし、次の質問に答えることができるように、コードとセットアップを検討します。

  1. レンダリングの遅延をまったく回避するためにシステムを最適化することは可能ですか? DB のインデックス作成を確認し、クエリと DB 設定をいじることで、不可能と思われていたことが実際のシナリオに変わる可能性があります。

  2. 遅延ジョブでデータを収集し、json としてシリアル化し、ブラウザ側でプレゼンテーションを実行するだけで十分でしょうか? そうすることで、ボトルネックを発見し、処理を webapp に戻すことを決定した場合に、自分自身を元に戻すことができます。

  3. 事前計算 (より単純な構造のテーブルを使用) が役立つでしょうか? これらのテーブルを常にバックグラウンドで設定したり、トリガーを使用してアプリをまっすぐに動作させたりすることができます.

上記の何かが役立つことを願っています:)

于 2012-11-10T01:32:50.870 に答える