2

sprockets は js アセットのすべての縮小を行いますが、多くの JavaScript はrespond_to :jsUJS 応答で記述されます。

プログラミング中に JavaScript を読み取り可能にすると、ブラウザーが処理中に必要としない無駄なデータ (読み取り可能な変数名やスペースなど) で肥大化します。

UJS 応答を自動的に縮小/醜化して、プログラミング中に読み取り可能なままにし、ブラウザに送信すると縮小する方法はありますか? (ソースの縮小はオプションではありません)

4

1 に答える 1

0

まず、あなたが話しているのは必ずしも 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
于 2013-01-28T17:41:03.923 に答える