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

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

sprockets 为 js Assets 做了所有的缩小,但是很多 javascript 是在 respond_to :js UJS 响应中编写的。

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

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

最佳答案

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

关于javascript - 有没有办法缩小 Rails UJS 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550415/

相关文章:

javascript - 如何在 Vue 中使过滤列表更具动态性

javascript - 没有新运算符的错误

javascript - Dayjs:无法将自定义 24 小时时间格式化为 12 小时

javascript - 扩展 javascript 以使用多个 Canvas 框

ruby-on-rails - 使用正则表达式从字符串中提取电话号码?

ruby-on-rails-3 - Rails 3 - form_for 复数化在 "new"操作上导致路径/方法错误,但在 "edit"上没有

javascript - 如何在 javascript 中使用 grails ${createLink}

jquery - 使用ajax调用设置 session 变量并刷新部分

jquery - 使用 jQuery 删除动态添加的 LI 列表项

ruby - Rails has_and_belongs_to_many & has_many :through scaffolding