我正在从Rails 3.2处理流式下载(CSV),并且针对初始页面请求需要花费很长时间的问题。下面的控制器代码说明我的问题:Rails 3.2流式传输
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
。
我不明白这一点。该代码从另一个枚举器创建一个枚举器并分配response_body变量。右边的东西将首先被执行(除非你有一些魔术元素正在进行),并且放入的数字越大,需要的时间就越长。您需要更多的东西来做流式处理,但我自己并没有任何建议。 – froderik 2012-03-29 13:32:56
您可能已经检出了http://api.rubyonrails.org/classes/ActionController/Streaming.html – froderik 2012-03-29 13:34:47
请参阅我在上面添加的关于该技术的解释的链接。 – 2012-03-29 15:45:30