diff --git a/build/build.py b/build/build.py index 417440031e..06fe082144 100755 --- a/build/build.py +++ b/build/build.py @@ -12,6 +12,11 @@ def build(config_file = None, output_file = None, options = None): have_compressor.append("jsmin") except ImportError: print "No jsmin" + try: + import closure_ws + have_compressor.append("closure_ws") + except ImportError: + print "No closure_ws" try: import minimize @@ -39,14 +44,14 @@ def build(config_file = None, output_file = None, options = None): print "Merging libraries." merged = mergejs.run(sourceDirectory, None, configFilename) + print "Compressing using %s" % use_compressor if use_compressor == "jsmin": - print "Compressing using jsmin." minimized = jsmin.jsmin(merged) elif use_compressor == "minimize": - print "Compressing using minimize." minimized = minimize.minimize(merged) + elif use_compressor == "closure_ws": + minimized = closure_ws.minimize(merged) else: # fallback - print "Not compressing." minimized = merged print "Adding license file." minimized = file("license.txt").read() + minimized diff --git a/tools/closure_ws.py b/tools/closure_ws.py new file mode 100644 index 0000000000..fb989d9088 --- /dev/null +++ b/tools/closure_ws.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +import httplib, urllib, sys +import time +# Define the parameters for the POST request and encode them in +# a URL-safe format. + +def minimize(code): + + params = urllib.urlencode([ + ('js_code', code), + ('compilation_level', 'SIMPLE_OPTIMIZATIONS'), + ('output_format', 'text'), + ('output_info', 'compiled_code'), + ]) + + t = time.time() + # Always use the following value for the Content-type header. + headers = { "Content-type": "application/x-www-form-urlencoded" } + conn = httplib.HTTPConnection('closure-compiler.appspot.com') + conn.request('POST', '/compile', params, headers) + response = conn.getresponse() + data = response.read() + conn.close() + print "%.3f seconds to compile", time.time() - t + return data