【问题标题】:Rails Javascript compression/minification on respond_to javascript response?在respond_to javascript响应上的Rails Javascript压缩/缩小?
【发布时间】:2010-09-27 16:47:30
【问题描述】:

向 Rails 和 Javascript 大师致敬!

我有一个项目,我在

中返回一个大型 javascript 文件
respond_to do |format|
   format.js
end

阻止。

我试图弄清楚如何缩小或压缩 .js 响应,因为 .js.erb 视图充满了 cmets,并且大小会根据控制器的结果而变化。

有人有什么想法吗?

【问题讨论】:

    标签: javascript ruby-on-rails


    【解决方案1】:

    对于 Rails 4:

    render js: Uglifier.new.compile(render_to_string)
    

    【讨论】:

      【解决方案2】:

      好吧,也许我有一个解决方案:

      respond_to do |format|
        format.js { self.response_body = minify(render_to_string) }
      end
      

      这非常有效。当然,关键是 minify 方法。你会发现很多 JS 缩小器。例如,您可以使用这个(如果许可证允许的话):http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb - 它基于 Crockford 的 jsmin.c。

      如果你把这个文件放到你的库中,需要它,你的 minify 方法可能如下所示:

      def minify(content)
        min = Smurf::Javascript.new(content)
        min.minified
      end
      

      希望对你有所帮助。

      如果您打算自动缩小,那么您可能应该选择一个中间件。令人惊讶的是我找不到任何东西(有很多针对 CSS/JS,但它是关于静态资产而不是动态内容)但编写它不会是一个问题。

      【讨论】:

      • 谢谢帕文!这给了我一些值得思考的东西。 :) 将结果传递给一个块并使用压缩器处理它似乎是一个很好的解决方案。然后我只需要弄清楚如何缓存输出。我今天和明天都会玩这个。我可能会打扰你。 :D
      • 在 Rails3.2 中有没有办法做到这一点,只使用它自己的资产管道内置功能?
      • 感谢拉德克!很好的解决方案。 nazar,在下面添加了我的 rails 3 修改位
      【解决方案3】:

      对于使用内置 Uglifier 方法的 rails 3(资产管道的默认设置)

      查看上面 Radek 的代码,然后将其换掉。

        def minify(content)
          Uglifier.new.compile(content)
        end
      

      【讨论】:

        猜你喜欢
        • 2012-01-29
        • 2023-01-25
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多