Bac*_*cko 19 ruby performance ruby-on-rails filter ruby-on-rails-3
我正在使用Ruby on Rails 3.1,我想知道(出于性能原因)是否after_filter
渲染了该视图文件之后的运行.也就是说,当用户访问我的应用程序URL时,他/她应该显示的相关视图文件after_filter
在after_filter
运行之前呈现,或者在呈现视图文件之前运行?
换句话说,应用程序服务器在运行之前开始将呈现的视图数据发送给用户,after_filter
或者它等待运行该after_filter
方法,然后才发送该视图数据?
PS:我打开了这个问题,因为我想运行一些系统更新(注意:这些更新不会影响视图输出数据,并且不会"视图"/"必要"用于视图)而不会影响结束用户体验(例如:缓慢加载我的应用程序网页).
apn*_*ing 12
您必须知道对服务器的请求是完全一致的,并在其自己的线程中运行.
如果你把代码放在一个after_filter
,这将延迟整个请求:总结严重,如果线程是活着的,页面不会被传递.
这就是为什么你会发现像伟大的插件DelayedJob
和Resque
,他们在并行处理工作,并不会影响您的应用程序.
要回答原始问题,请after_filter
在处理视图后触发.
这有时是一个麻烦,这就是人们创建一些过滤器的原因.before_render
after_filter
在内容生成之后但在将内容发送到客户端之前运行.您可以验证这是因为您可以response
在任何after_filter中访问控制器方法中完全生成的响应数据.
After_filters是放置长时间运行任务的不合适的地方,因为它们肯定会影响用户的体验.相反,请考虑使用after_filter来启动长时间运行的delayed_job或resque任务来代替执行后台工作.
归档时间: |
|
查看次数: |
10580 次 |
最近记录: |