假設我在Heroku上有一個Rails 4.2站點,上面有很多帖子。當查看帖子時,應用程序命中數據庫以從其他模型獲取帖子的數據和關聯數據。 遊客(非登錄用戶)到我的網站上看到的帖子,沒有任何自定義,所以顯示這些頁面應該不需要訪問數據庫。我怎樣才能建立簡單的網頁或動作緩存(或等同的)的所有遊客到我的網站,所以數據庫被跳過?我是否也可以讓CDN接管渲染這些頁面?如何爲訪問者添加頁面緩存到我的Rails應用程序?
回答
對於初學者,看看the Rails caching guide。頁面和動作緩存已經從Rails中刪除。
您可以嘗試片段緩存,它將抓取生成的帖子的HTML並將其存儲,儘管您將需要基於是否存在current_user
的條件。
一個超簡單的版本可能看起來像:
應用程序/視圖/職位/ show.html.erb
<% cache_unless (current_user, @post) do %>
<%= @post.body %>
<% end %>
的cache
方法將是一個讀行動,如果該帖子存在高速緩存,並且如果該高速緩存不存在,則將生成動作並寫入動作。
緩存與一個ActiveRecord對象創建一個包含updated_at
默認的關鍵,因此,如果一個崗位的變化,加載後會擁有更長的等待時間的第一位訪客,並且以後每訪客會得到緩存的好處。
至於你的其他問題,也有提供靜態頁面許多其他基於Ruby的工具,而所有這些的審查超出了我的知識,或許超出了這個問題的範圍。 :)
你不是真的想在這裏緩存。你只是想在這兩個控制器和視圖條件,像
# controller
if logged_in?
@post = Post.find(params[:id])
# load more records
end
# view
<% if @post %>
<%= @post.title %>
...
<% else %>
You're not logged in, blah blah.
<% end %>
..假設控制器不僅僅是加載後紀錄。我不一定同意有條件地加載上面的記錄,但是您的用例可能需要它。
另外,如果你確實需要出於性能方面的緩存,你可以優雅地包括在片段緩存鍵像
<% cache "post-#{@post.id}-#{current_user ? current_user.id : 0}" do %>
<% if logged_in? %>
... # expensive operations
<% else %>
Please login to see more..
<% end %>
<% end %>
以便高速緩存可與用戶或anons相同的代碼當前用戶ID 。
蘭尼Bose的答案看起來真的是最好的,但我會添加此鏈接:
https://devcenter.heroku.com/articles/http-caching-ruby-rails#public-requests
整個頁面是有用的,但特別是它談論標記請求作爲公共或私人。它們在默認情況下是私有的,但如果您將其標記爲公開,則它允許頁面由中間代理緩存提供服務。
約架::緩存+內存緩存的代理緩存所鏈接的頁面會談;我不確定這是否仍然存在於rails 4中。
這第二頁的Heroku大約動作緩存會談,可以緩存特定的動作給你:
https://devcenter.heroku.com/articles/caching-strategies#action-caching
- 1. 如何爲首次訪問者提供緩存頁面?
- 2. 我如何將作者頁面添加到作者頁面?
- 3. 如何將應用程序添加到我的Facebook頁面?
- 4. 如何添加多個頁面到我的IOS應用程序?
- 5. 我現在如何將我的應用程序添加到我的頁面?
- 6. 如何讓我的Facebook應用程序訪問發佈到我的Facebook頁面?
- 7. 應用程序頁面緩存
- 8. 動態添加頁面到rails應用程序
- 9. 如何將緩存清單添加到Meteor應用程序?
- 10. 如何將我的應用程序添加到我的粉絲頁面?
- 11. 如何將我的Facebook應用程序添加到我的粉絲頁面?
- 12. 如何將我創建的應用程序添加到我的某個頁面?
- 13. 如何爲不同的Facebook頁面添加應用程序?
- 14. 如何將我的JavaScript文件添加到Rails應用程序?
- 15. 如何從模板添加JQuery到我的Rails應用程序?
- 16. 如何添加我的Rails應用程序到Heroku?
- 17. 如何將頁面添加到現有的AngularJS應用程序?
- 18. 如何使用HTML5的應用程序緩存(appcache)來緩存動態頁面?
- 19. 「添加到我的頁面」應用程序缺失鏈接
- 20. 刷新我的訪問者緩存
- 21. 訪問控制Rails應用程序中的不同頁面?
- 22. 如何訪問Spark Streaming應用程序中的緩存數據?
- 23. 如何將Facebook評論添加到單頁面應用程序?
- 24. 如何將應用程序添加到Facebook社區頁面?
- 25. 如何將新頁面添加到Android應用程序?
- 26. 如何將HTML頁面添加到React應用程序
- 27. 用redis Rails頁面緩存?
- 28. 訪問應用程序是Facebook頁面
- 29. 從應用程序訪問頁面?
- 30. 的Rails 3.如何將API添加到Rails應用程序