我正在使用Ruby on Rails 3.1,我想知道(出于性能原因)是否在渲染视图文件之后运行after_filter.也就是说,当用户访问我的应用程序URL时,他/她应该显示的相关视图文件在after_filter运行之前呈现,或者after_filter在渲染视图文件之前运行?
换句话说,应用程序服务器在运行after_filter之前开始向用户发送渲染的视图数据,或者它等待运行after_filter方法,然后才发送该视图数据?
PS:我打开这个问题,因为我想运行一些系统更新(请注意:这些更新不会影响视图的输出数据,并不会对视图“使用”/“必要”),而不影响结束用户体验(例如:缓慢加载我的应用程序网页).
解决方法
您必须注意到对您的服务器的请求是完全一致的,并以其自身的线程运行.
如果将代码放在after_filter中,这将延迟整个请求:总结一下,如果线程还活着,页面不会传递.
这就是为什么你会发现很好的插件,如DelayedJob和Resque,他们工作在一个并行进程,不会影响你的应用程序.
为了回答您的原始问题,在处理视图后会触发after_filter.
这有时是一个麻烦,这就是为什么people created some before_render
filters.