‘after_filter’如何/何时运行/运行?

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

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

PS :我打开了这个问题,因为我想运行一些系统更新( 注意 :这些更新不会影响视图输出数据,并且不会“视图”/“必要”用于视图)而不会影响结束用户体验(例如:缓慢加载我的应用程序网页)。

您必须意识到对服务器的请求是完全一致的,并在其自己的线程中运行。

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

这就是为什么你找到像DelayedJobResque这样的好插件的原因,它们可以在并行进程中工作,不会影响你的应用程序。


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

这有时是一个麻烦,这就是人们创建一些before_renderfilter的原因。

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

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