Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法缩小Rails UJS的响应?_Javascript_Jquery_Ruby On Rails 3_Minify_Ujs - Fatal编程技术网

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

Javascript 有没有办法缩小Rails UJS的响应?,javascript,jquery,ruby-on-rails-3,minify,ujs,Javascript,Jquery,Ruby On Rails 3,Minify,Ujs,sprockets完成了js资产的所有缩小,但是很多javascript都是用response\u to:jsUJS响应编写的 在编程时使javascript可读也会使其充满无用的数据,而浏览器在处理这些数据时并不需要这些数据(如可读的变量名和空格) 有没有一种方法可以自动缩小/丑化UJS响应,使其在编程时保持可读性,但在发送到浏览器时缩小?(缩小源代码不是一个选项)首先,您谈论的不一定是UJS,而是从ruby模板动态生成的javascript UJS通常不是通过动态javascript完成的,

sprockets完成了js资产的所有缩小,但是很多javascript都是用
response\u to:js
UJS响应编写的

在编程时使javascript可读也会使其充满无用的数据,而浏览器在处理这些数据时并不需要这些数据(如可读的变量名和空格)


有没有一种方法可以自动缩小/丑化UJS响应,使其在编程时保持可读性,但在发送到浏览器时缩小?(缩小源代码不是一个选项)

首先,您谈论的不一定是UJS,而是从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