Ruby on rails 如何/何时';后过滤器';工作/运行?

Ruby on rails 如何/何时';后过滤器';工作/运行?,ruby-on-rails,ruby,ruby-on-rails-3,performance,filter,Ruby On Rails,Ruby,Ruby On Rails 3,Performance,Filter,我使用的是RubyonRails3.1,我想知道(出于性能原因)视图文件渲染后,after\u过滤器是否运行。也就是说,当用户访问“我的应用程序URL”时,他/她应该显示的相关视图文件在after\u filter运行之前呈现,或者在呈现视图文件之前运行after\u filter吗 换句话说,应用服务器在运行after\u filter之前开始向用户发送渲染视图数据,或者等待运行after\u filter方法,然后才发送该视图数据? 注意:我之所以提出这个问题,是因为我想运行一些系统更新(注

我使用的是RubyonRails3.1,我想知道(出于性能原因)视图文件渲染后,
after\u过滤器是否运行。也就是说,当用户访问“我的应用程序URL”时,他/她应该显示的相关视图文件在
after\u filter
运行之前呈现,或者在呈现视图文件之前运行
after\u filter

换句话说,应用服务器在运行
after\u filter
之前开始向用户发送渲染视图数据,或者等待运行
after\u filter
方法,然后才发送该视图数据?


注意:我之所以提出这个问题,是因为我想运行一些系统更新(注意:这些更新不会影响视图输出数据,并且根本不会“被”/“视图”所使用”),而不会对最终用户体验产生影响(例如:我的应用程序网页加载缓慢).

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

如果在过滤后将代码放入
,这将延迟整个请求:总而言之,如果线程处于活动状态,则页面不会被传递

这就是为什么你会发现像
DelayedJob
Resque
这样的优秀插件,它们在并行过程中工作,不会影响你的应用程序


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


这有时是一个麻烦,这就是为什么在内容生成之后,但在将其发送到客户端之前,会运行

。您可以验证这一点,因为您可以在任何after_筛选器中访问控制器的
response
方法中完全生成的响应数据

After_筛选器不适合放置长时间运行的任务,因为它们肯定会影响用户体验。请考虑使用后过滤器来启动长时间的运行或任务来执行后台工作。