まず、あなたが話しているのは必ずしも UJS ではなく、むしろRJS または Ruby JavaScript、または Ruby テンプレートからオンザフライで生成された JavaScript です。
UJS は、非常に (ほとんど?) 多くの場合、動的な JavaScript を介して行われるのではなく、静的な JavaScript によって操作される動的データを返すことによって行われます。これには多くの利点があります。このケースに関連する: これは、JavaScript が既にクライアント側で圧縮されている (そしておそらくキャッシュされている) ことを意味し、シリアル化されたデータをネットワークに送信しているだけです。
可能であれば、そのアプローチを使用することを検討することをお勧めします。
それができない場合は、以下のようなミドルウェアを使用して RJS アクションを自動的に縮小することができます (生の疑似コード バージョン)。ただし、注意して行ってください。また、すべてのリクエストを縮小する時間/コストと、より大きなファイルをクライアントに送信する時間/コストなど、縮小の利点がコストに見合うかどうかを検討する必要があります。
ミドルウェアの詳細については、ドキュメントを参照してください
module RJSMinifier
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
# pseudocode: if this is not an RJS request or the request did not
# complete successfully, return without doing anything further
if (this request is not RJS or status is not ok)
return [status, headers, response]
end
# otherwise minify the response and set the new content-length
response = minify(response)
headers['Content-Length'] = response.length.to_s
[status, headers, response]
end
def minify(js)
# replace this with the real minifier you end up using
YourMinifier.minify(js)
end
end