4

コントローラーから動的画像を生成するためにrmagick gemを使用しています。コントローラーは ID をパラメーターとして受け取り、モデルを検索し、既存の画像にテキストを書き込み、それを出力します。

リクエストごとに生成する場合とディスクに書き込む場合を比較しsend_data、既に存在する場合はそれを出力するために使用するベンチマークをいくつか実行しました。これら 2 つの方法の 1 秒あたりのリクエスト数に大きな違いはありません。

リクエストごとに画像を動的に生成するのではなく、画像をキャッシュするか、ディスクに書き込むためのベスト プラクティスはありますか? 生成されると、これらの画像はほとんど静的なままになりますが、一定の時間間隔後に再生成するオプションも必要です。

4

3 に答える 3

5

ベスト プラクティスは、生成された画像をキャッシュし、Web サーバーがそれらを提供できるようにすることです。

Rails アプリの前に Apache や Nginx などの Web サーバーを使用し、Web サーバーがサービスを提供できる場所にイメージを書き込むようにしてください。したがって、Rails ルートが( id=3 および format=png でアクション/dynamic_images/3.pngを呼び出す) と評価される場合は、その画像をコントローラーに書き込み、コントローラーで使用して送信します。dynamic_images_controllershowpublic/dynamic_images/3.pngsend_file

次にそのファイルがリクエストされたとき ( /dynamic_images/3.png)、Web サーバーは喜んでそれを提供 (キャッシュ) し、Rails アプリがヒットすることはありません。

画像の再生成やコントローラー コードのクリーンアップなどの高度なニーズについては、paperclip gem を参照してください。

于 2009-12-02T12:17:51.580 に答える
2

単なるアイデア (試したことはありません): memache を使用して画像 (特に動的に生成されるもの) を保存してみませんか?

Rails.cache.write("MY_IMAGE", 画像)

于 2011-08-12T16:09:44.713 に答える
1

キャッシュされた画像は、Webサーバーによって提供されるディレクトリに配置する必要があります。これにsend_dataを使用したくない-それは遅すぎる。また、VCSでそのディレクトリを無視することもできます。

于 2009-12-01T20:36:58.507 に答える