PERF: Uglify and gzip assets concurrently.

This commit is contained in:
Guo Xiang Tan 2016-04-20 09:34:30 +08:00
parent 51b0b5f2f8
commit b744306654
No known key found for this signature in database
GPG key ID: 19C321C8952B0F72

View file

@ -116,6 +116,16 @@ def compress(from,to)
end
end
def concurrent?
if ENV["CONCURRENT"] == "1"
concurrent_compressors = []
yield(Proc.new { |&block| concurrent_compressors << Concurrent::Future.execute { block.call } })
concurrent_compressors.each(&:wait!)
else
yield(Proc.new { |&block| block.call })
end
end
task 'assets:precompile' => 'assets:precompile:before' do
# Run after assets:precompile
Rake::Task["assets:precompile:css"].invoke
@ -124,6 +134,7 @@ task 'assets:precompile' => 'assets:precompile:before' do
puts "Compressing Javascript and Generating Source Maps"
manifest = Sprockets::Manifest.new(assets_path)
concurrent? do |proc|
to_skip = Rails.configuration.assets.skip_minification || []
manifest.files
.select{|k,v| k =~ /\.js$/}
@ -138,6 +149,7 @@ task 'assets:precompile' => 'assets:precompile:before' do
else
STDERR.puts "Compressing: #{file}"
proc.call do
# We can specify some files to never minify
unless (ENV["DONT_MINIFY"] == "1") || to_skip.include?(info['logical_path'])
FileUtils.mv(path, _path)
@ -149,6 +161,8 @@ task 'assets:precompile' => 'assets:precompile:before' do
gzip(path)
end
end
end
end
# protected
manifest.send :save