'after_filter'如何/何时运行/运行?

时间:2012-02-24 20:07:13

标签: ruby-on-rails ruby ruby-on-rails-3 performance filter

我正在使用Ruby on Rails 3.1,我想知道(对于性能的原因)after_filter是否在呈现视图文件之后运行。也就是说,当用户访问我的应用程序URL时,他/她应该显示的相关视图文件在after_filter运行之前呈现,或after_filter在呈现视图文件之前运行?< / p>

换句话说应用程序服务器开始在运行after_filter之前将呈现的视图数据发送给用户,或者它等待运行after_filter方法,然后才发送该视图数据?

PS :我打开了这个问题因为我想运行一些系统更新( note :这些更新不会影响视图输出数据而不是&#34;&#34; /&#34;根本不需要视图,而不影响最终用户体验(例如:我的应用程序网页加载缓慢)。

2 个答案:

答案 0 :(得分:12)

您必须知道对服务器的请求是完全一致的,并且在自己的线程中运行。

如果你把代码放在after_filter中,这将延迟整个请求:总结得很糟糕,如果线程处于活动状态,页面就不会被传递。

这就是为什么你找到像DelayedJobResque这样的优秀插件的原因,它们可以在并行流程中运行,不会影响你的应用。


要回答原始问题,请在处理完视图后触发after_filter

这有时是一个麻烦,这就是people created some before_render filters.

的原因

答案 1 :(得分:5)

after_filter在内容生成后运行,但在发送到客户端之前运行。您可以验证这是因为您可以在任何after_filter中访问控制器的response方法中完全生成的响应数据。

After_filters是放置长时间运行任务的不适当的地方,因为它们肯定会影响用户的体验。相反,请考虑使用after_filter启动长时间运行的delayed_jobresque任务,以执行后台工作。