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