2012-01-22 41 views
0

我有一个产品页面。该节目的行动具有下面的代码:我应该如何缓存一个应该跟踪每个视图的页面?

def show 
    ... 
    LiveView.add_live_view(@product, request) 
    ... 
end 

在这同一个控制器,如果我有:

caches_action :show, :cache_path => (proc do 
    product_path(params[:id], :user_id => user_signed_in? ? current_user.id : nil) 
end) 

我想显示实时视图,从request抢夺IP地址。所以,我需要跟踪每个浏览页面的视图。但是,如果页面已被缓存,它将永远不会触发LiveView.add_live_view(@product, request)方法。

问题是。我应该缓存这个动作吗?如果是这样,应该怎么做?或者我应该忘记这种方法的缓存?

我应该考虑一种不同的缓存方法吗?有什么建议么?

回答

0

我不知道在应用程序级别缓存是否是正确的解决方案。我建议看看mod_cache哪些在apache层缓存响应。 (如果你正在用乘客运行apache)。

最后,不要忘了这条规则。永远不要优化,除非你必须。我的意思是,先测试你的应用程序。如果不缓存,不会出现性能损失。你还需要缓存一切吗?做一些代码分析,也许你可以使用更好的算法。

编辑时,也请看HTTP状态码304。如果用户刷新页面,并且您可以传达没有任何变化,那么只需返回304.

+0

我喜欢这个规则。不过,我听说最好总是缓存一个“show”页面。如果同一用户决定点击重新加载按钮或再次访问同一页面,这是有益的。你对此有何看法? –

+0

我忘了提及,我们的应用程序在Heroku上运行。所以不要认为我们有权访问应用程序层。 –

+0

首先我会检查什么是不缓存任何东西的影响。此外,如果您有网站分析,请检查有多少人实际刷新页面。最后,如果您决定缓存此页面,请先检查时间戳,如果没有更改,则返回304状态。我真的认为这是大多数开发人员忘记做的事情。浏览器的缓存正是为此。 –

相关问题