Rails Javascript compression/minification on respond_to javascript response?
Greetings Rails and Javascript Gu开发者_JS百科rus!
I have a project where I am returning a large javascript file in a
respond_to do |format|
format.js
end
block.
I am trying to figure out how I can minify or compress the .js response since the .js.erb view is full of comments and varies in size based on the results from the controller.
Anyone have any ideas?
For Rails 4:
render js: Uglifier.new.compile(render_to_string)
well, maybe I have a solution:
respond_to do |format|
format.js { self.response_body = minify(render_to_string) }
end
This perfectly works. Of course that the key is the minify method. You will find a lot of JS minifiers around. For example you can use this one (well if license permits): http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb - it is based on Crockford's jsmin.c.
If you put this file into your lib, require it, your minify method can look like this:
def minify(content)
min = Smurf::Javascript.new(content)
min.minified
end
Hope that it helped you.
If you plan to do minifying automatically then you probably should go for a piece of middleware. Surprisingly I was not able to find any (there are many aimed to the CSS/JS but it's about static assets not dynamic content) but it would not be such a problem to write it.
For rails 3 using the built in Uglifier method (the default for the assets pipeline)
See Radek's code above and just swap this in.
def minify(content)
Uglifier.new.compile(content)
end
精彩评论