2016-07-15 9 views
0

ウェブサイトのパフォーマンスを向上させるためにフラグメントキャッシュを追加しようとしていました。 は今、私はdevelopmentモードでそれをテストしたので、私はこのRails Fragment Cachingが機能しない

#environments/developments.rb 
config.action_controller.perform_caching = true 

そしてerb

<% @projects.each do |project| %> 
    <% cache project do %> 
     <%= link_to "#{project.name}", category_project_path(@category, project) %> 
     <br> 
    <% end %> 
<% end %> 

での変更しかし、動作しないようです。私はページをリフレッシュするたびに、それは再びターミナルでクエリを示した。

初めてクエリを実行すると1回しかクエリできないと思いましたが、キャッシュの概念を誤解しましたか?

Processing by CategoriesController#show as HTML 
    Parameters: {"id"=>"3306"} 
    Category Load (0.4ms) SELECT "categories".* FROM "categories" WHERE "categories"."id" = $1 LIMIT 1 [["id", 3306]] 
    Project Load (0.5ms) SELECT "projects".* FROM "projects" WHERE "projects"."category_id" IN (3306) 
    (0.4ms) SELECT DISTINCT COUNT(DISTINCT "projects"."id") FROM "projects" WHERE "projects"."category_id" = $1 [["category_id", 3306]] 
    Project Load (1.0ms) SELECT DISTINCT "projects".* FROM "projects" WHERE "projects"."category_id" = $1 LIMIT 10 OFFSET 0 [["category_id", 3306]] 
    Cache digest for app/views/categories/show.html.erb: 9b54e2d9c7ce230e3f6a333f00d549da 
Read fragment views/projects/3670-20160715055333331671000/9b54e2d9c7ce230e3f6a333f00d549da (0.2ms) 
    Cache digest for app/views/categories/show.html.erb: 9b54e2d9c7ce230e3f6a333f00d549da 
Read fragment views/projects/3677-20160715055334439274000/9b54e2d9c7ce230e3f6a333f00d549da (0.2ms) 
    Cache digest for app/views/categories/show.html.erb: 9b54e2d9c7ce230e3f6a333f00d549da 
Read fragment views/projects/3678-20160715055334446172000/9b54e2d9c7ce230e3f6a333f00d549da (0.2ms) 
    Cache digest for app/views/categories/show.html.erb: 9b54e2d9c7ce230e3f6a333f00d549da 
Read fragment views/projects/3689-20160715055334536421000/9b54e2d9c7ce230e3f6a333f00d549da (0.1ms) 
    Rendered categories/show.html.erb within layouts/application (8.7ms) 
Completed 200 OK in 31ms (Views: 26.0ms | ActiveRecord: 2.3ms) 
+0

ログによれば、プロジェクトはキャッシュから読み込まれます。 "Read fragment views/projects/3670-20160715055333331671000"のようになります。 – power

+0

それで、何を問わず、もう一度クエリを実行し、新しいクエリデータやキャッシュデータを使用するかどうかを自動的に決定します。 –

答えて

0

ログによれば、データは製品からキャッシュに読み込まれ、製品に対してクエリが実行されていないようです。

views/projects/3670-20160715055333331671000/9b54e2d9c7ce230e3f6a333f00d549da 

真ん中の数字は、製品レコードのupdated_at属性のproduct_idに続いてtimestamp値です。 Railsは、タイムスタンプ値を使用して、失効したデータを提供していないことを確認します。 updated_atの値が変更された場合、新しいキーが生成されます(データベースへのクエリが実行されます)。それから、Railsはそのキーに新しいキャッシュを書き出し、古いキーに書き込まれた古いキャッシュは決して再び使用されません。 願っています!

+0

ありがとう、私は今理解しています。素晴らしい答え! –

関連する問題