2016-07-15 68 views
0

我試圖添加片段緩存來加速網站的性能。 現在,我測試了它在development模式,所以我改變了Rails Fragment緩存不起作用

#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 %> 

但似乎不起作用。每次刷新頁面時,都會在終端中再次顯示查詢。

我以爲它只會在第一次查詢一次,或者我誤解了緩存的概念?

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

謝謝,我現在明白了。很好的答案! –