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



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

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

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

首先,你说的不一定是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

相关内容

  • 没有找到相关文章

最新更新