Ruby on Railsで開発しております。

# 現状

現在、View側で、統計情報などを集計し、描画しているページがあります。  
DBに保存せず、かつ、統計情報も多岐に渡るため、描画に2分近く時間がかかってしまいます。

現状では、ユーザー体験としてはよくないため、キャッシュした結果を返そうと考えております。

DBに保存するというのも手段としてあるのですが、業務要件上、キャッシュにしてほしいのと、現状のコードをDBに保存するように改修するのは時間を要してしまうためです。

その上で、一日に一回キャッシュを更新するということを考えております。

これ自体はフラグメントキャッシュ等でできるのかと思います。

# 問題点

`一日一回キャッシュを更新後、初回のユーザーアクセスの場合は、キャッシュされていないため、描画に2分かかってしまう`

ことです。

初回のユーザーアクセスさえ、耐えきれば、2回目以降は、キャッシュ化された結果を返すことができるため、良いのですが、この初回アクセスを、システム側で何とかできないのでしょうか？

# 目標

初回のユーザーアクセスの場合も、キャッシュ化した結果を返し、ユーザー体験を良くする

宜しくお願いします。
CC BY-SA 3.0
2016-09-28T05:27:42.753
29204
2016-09-28T07:25:06.163
13175
question
ruby-on-rails ruby
一日一回、フラグメントキャッシュをした上で、初回のユーザーアクセスもキャッシュ化した結果を返したい。
統計情報の部分だけ切り離して、Ajaxなどで別途取得するようにしてはいかがでしょうか？  
そうすれば、取得前の状態では「Loading...」と表示するか、新しい統計結果が出るまえは、以前の統計情報を表示する、といったことが出来ると思いますが、、。

そうではなく、単純にキャッシュで対応する方が良いのであれば、

キャッシュが解除されたときにデーモンなどで自前でそのページにアクセスし、あらかじめキャッシュさせておくことにするのではどうでしょうか？

デーモンを作るのが面倒であれば、キャッシュを二重化(AとB)にして、Aキャッシュを生成するのはhtmlから呼ばれるajaxにして、htmlを表示するときは、AがあればAを表示してBキャッシュにも保存。AがないときはBをそのまま表示、とかでどうでしょうか？
CC BY-SA 3.0
2016-09-28T07:14:38.853
29208
2016-09-28T07:25:06.163
2016-09-28T07:25:06.163
8848
8848
29204
answer