我正在从Rails 3.2进行流式下载(CSV),遇到了初始页面请求需要很长时间的问题。以下控制器代码说明了我的问题:
self.response_body = Enumerator.new do |y|
10_000_000.times do
y << "Hello World"
end
end
有了以上内容,响应看起来确实像是流媒体(来自一个无法支持它的服务器…在我的情况下是独角兽)。也就是说,在它开始流媒体播放之前,它的挂起时间比我希望的要长得多。如果我把它改成以下,它的启动速度会快得多:
self.response_body = Enumerator.new do |y|
1000.times do
y << "Hello World"
end
end
我的理解是,响应应该从循环的第一次迭代开始,但似乎较大的循环会导致初始加载时间延长。如果每次迭代都是在发生时输出的,那么启动流式处理是否应该花费相同的时间,不管总共会有多少次迭代???
感谢您的真知灼见!
编辑:
以下是对我尝试的技术的解释。也许我误解或错过了一步?:http://facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399
编辑:
我认为机架缓存可能导致了我的问题。。。我可以为个人请求关闭它吗?
编辑并解决:
我对Rack Cache的看法是错误的。我只需要将self.response.headers['Last-Modified'] = Time.now.ctime.to_s
添加到我的响应中。
编辑后的问题正好包含了我需要的答案。将其作为答案张贴在此处。
让机架处理程序正确流式传输的答案显然是在响应中添加一个Last-Modified
标头:
self.response.headers['Last-Modified'] = Time.now.ctime.to_s