Я работаю над потоковой загрузкой (CSV) из Rails 3.2, и я сталкиваюсь с проблемой первоначального запроса страницы, занимающего много времени. Следующий код контроллера показывает мой вопрос:Rails 3.2 streaming
self.response_body = Enumerator.new do |y|
10_000_000.times do
y << "Hello World"
end
end
С выше, ответ, похоже, как его потоковое (с сервера, чем может поддержать его ... Unicorn, в моем случае). Тем не менее, прежде чем он начнет потоковое вещание, он висит гораздо дольше, чем хотелось бы. Если изменить его к следующему, он начинает гораздо быстрее:
self.response_body = Enumerator.new do |y|
1000.times do
y << "Hello World"
end
end
Я понимаю, что ответ должен начинаться с первой итерации цикла, но, кажется, большие циклы, вызывая, что начальное время загрузки, чтобы удлинить , Если каждая итерация выводится так, как это происходит, не нужно ли брать такое же количество времени, чтобы начать процесс потоковой передачи, независимо от того, сколько всего будет повторяться итераций?
Спасибо за понимание, которое у вас может быть!
EDIT:
Вот объяснение техники я пытающаяся. Может быть, я искажая или отсутствующий шаг ?: http://facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399
EDIT:
Я думаю Rack-кэша может быть причиной моей проблемы ... я могу выключить его для конкретного запроса?
EDIT и РЕШИТЬ:
Я был неправ Rack-кэша. Мне просто нужно было добавить self.response.headers['Last-Modified'] = Time.now.ctime.to_s
к моему ответу.
Я не понимаю. Код создает один перечислитель из другого перечислителя и присваивает переменную response_body. Сначала будут выполняться вещи справа (если у вас не будет какой-то волшебной мета-вещи), и займет больше времени, тем больше будет число, которое вы вложили. Вам нужно что-то большее для потоковой передачи, но у меня нет предложения. – froderik
Вы, вероятно, уже проверили http://api.rubyonrails.org/classes/ActionController/Streaming.html – froderik
См. Ссылку, которую я добавил выше для объяснения этой техники. –