我有一个返回大量数据的 api,所以我想压缩这些数据并返回给客户端。 我知道在Nginx
或Rack::deflater in application.rb
中有一些方法。但是我只想为此特定的 api 响应压缩此数据。(不想在NGNIX中这样做(
我尝试了这个答案中提到的:https://stackoverflow.com/a/35758106/5925134。 我能够压缩,但无法使用压缩数据响应客户端。我试过这个,想以某种方式respond_to gz作为响应类型。
Zlib::GzipWriter.open('public/huge_data.gz') { |gz| gz.write data.to_json }
respond_to do |format|
format.gz { render gz: {File.read('public/huge_data.gz') } }
end
有没有办法将此压缩数据传递给客户端或任何其他方法?提前致谢
我不建议这样做,但如果您真的想手动压缩 JSON 响应,这就是您的操作方式:
class CompressedController < ApplicationController
def test
respond_to do |f|
f.json do
file = Tempfile.new
json = JSON.generate(hello: 'World')
Zlib::GzipWriter.open(file.path) { |gz| gz.write json }
response.set_header('Content-Encoding', 'gzip')
send_data file.read, type: :json, disposition: 'inline'
end
end
end
end
这只是一个自包含的最小示例。将其调整为您的实际用例。
如果您真的想以理智的方式解决性能问题,请在 Web 服务器层上使用压缩和缓存。