有没有办法缩小Rails UJS响应?

时间:2013-01-27 18:05:30

标签: javascript jquery ruby-on-rails-3 minify ujs

sprockets完成js资产的所有缩小,但很多javascript都是用respond_to :js UJS响应编写的。

在编程时使javascript可读也会使浏览器在处理它们时不需要的无用数据(如可读变量名和空格)臃肿

有没有办法自动缩小/ uglify UJS响应,以便在编程时保持可读性,但在发送到浏览器时会缩小? (缩小来源不是一种选择)

1 个答案:

答案 0 :(得分:0)

首先,你所谈论的不一定是UJS,而是RJS or Ruby JavaScript,或者是从ruby模板中即时生成的javascript。

UJS,非常(大多数?)经常不是通过动态javascript完成的,而是通过返回动态数据然后由静态javascript操纵。这有许多优点;与此案例相关:这意味着您的javascript已经缩小(并且可能已缓存)客户端,并且您只是通过网络发送序列化数据。

如果可以的话,你可能想考虑使用这种方法。

如果不能,您可以使用中间件自动缩小RJS操作,如下所示(原始伪编码版本)。但要小心这样做。您还需要考虑缩小的好处是否值得花费,例如:缩小每个请求的时间/成本与向客户端发送大文件的时间/成本。

有关中间件的更多信息,refer to the docs

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