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

Bac*_*cko 19 ruby performance ruby-on-rails filter ruby-on-rails-3

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

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

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

apn*_*ing 12

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

如果你把代码放在一个after_filter,这将延迟整个请求:总结严重,如果线程是活着的,页面不会被传递.

这就是为什么你会发现像伟大的插件DelayedJobResque,他们在并行处理工作,并不会影响您的应用程序.


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

这有时是一个麻烦,这就是人们创建一些过滤器的原因.before_render


Ver*_*cus 5

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

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