Tôi đang làm việc trên một tải xuống trực tuyến (CSV) từ Rails 3.2 và sáng lên chống lại một vấn đề của yêu cầu trang ban đầu mất một thời gian dài. Mã điều khiển sau đây minh họa sự cố của tôi:Rails 3.2 streaming
self.response_body = Enumerator.new do |y|
10_000_000.times do
y << "Hello World"
end
end
Với câu trả lời trên, dường như luồng của nó (từ máy chủ có thể hỗ trợ nó ... Unicorn, trong trường hợp của tôi). Điều đó nói rằng, trước khi nó bắt đầu phát trực tuyến nó treo trong một thời gian lâu hơn tôi muốn. Nếu tôi thay đổi nó để sau, nó bắt đầu nhanh hơn nhiều:
self.response_body = Enumerator.new do |y|
1000.times do
y << "Hello World"
end
end
sự hiểu biết của tôi là phản ứng nên bắt đầu với phiên đầu tiên của vòng lặp, nhưng có vẻ như các vòng lớn đang gây ra rằng thời gian tải ban đầu để kéo dài . Nếu mỗi lần lặp lại là đầu ra khi nó xảy ra, không nên mất cùng một lượng thời gian để khởi động quá trình phát trực tuyến, bất kể tổng số lần lặp lại sẽ là bao nhiêu ???
Cảm ơn mọi thông tin chi tiết bạn có thể có!
EDIT:
Đây là giải thích về kỹ thuật tôi đang cố gắng. Có lẽ tôi đang hiểu sai hoặc thiếu một bước ?: http://facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399
EDIT:
tôi nghĩ rack-Cache có thể gây ra vấn đề của tôi ... Tôi có thể tắt nó đi cho một yêu cầu cá nhân?
CHỈNH SỬA và GIẢI QUYẾT:
Tôi đã sai về Rack-Cache. tôi chỉ cần thêm self.response.headers['Last-Modified'] = Time.now.ctime.to_s
vào phản hồi của tôi.
Tôi không nhận được nó. Mã tạo ra một điều tra viên từ một điều tra viên khác và gán biến response_body. Các công cụ bên phải sẽ được thực thi đầu tiên (trừ khi bạn có một số công cụ meta kỳ diệu đang diễn ra) và sẽ mất nhiều thời gian hơn số lượng bạn đặt vào. Bạn cần thêm thứ gì đó để phát trực tuyến nhưng tôi không có đề xuất nào. – froderik
Bạn có thể đã xem http://api.rubyonrails.org/classes/ActionController/Streaming.html – froderik
Xem liên kết tôi đã thêm ở trên để biết giải thích về kỹ thuật. –