在Rails3.x中,我想手动预编译缓存,并在模型实例和静态HTML的视图中使用片段缓存。
Rails在请求页面时会延迟填充缓存,这会导致第一次加载时加载时间变慢。
因此,给定这个示例代码:
<% cache("index_chart") do %>
<%= high_chart("chart", @h) %>
<% end %>
如何使用Ruby手动填充缓存?
可能最简单的方法是编写一个shell脚本,向覆盖缓存的各种URL发出GET请求,也称为缓存预热。
一个简单的设置是在应用程序中创建一个名为scripts/cache_warmer的shell脚本,然后您可以从服务器命令行、部署脚本或像resque这样的后台处理器手动触发它。
# Sample scripts/cache_warmer
GET http://localhost/
GET http://localhost/some_other_page
如果你想让它更智能一点,那就另选它。比如能够为资源命中成员url就是使用rake任务。
# lib/tasks/cache_warmer.rake
task :cache_warmer => :environment do
Resource.all.each do |resource|
Net::HTTP.get_response("http://localhost/resources/#{resource.id}")
end
end
这当然只是一个基本的例子。你的实际代码会根据你试图点击的路线和数量而有所不同。您可能希望查看多线程的选项以获得更高的并发性,或者使用备用"工作"服务器来执行来自的请求。天空是复杂程度的极限,这取决于你的设置。