From 8d2bbfe28fe4d4a5f312ef36f616f5c6a564cec2 Mon Sep 17 00:00:00 2001 From: crschmidt Date: Thu, 24 Feb 2011 22:39:40 +0000 Subject: [PATCH] Add support for the closure compiler webservice, using simple optimizations. Using this build mode, on a lite build, we save approximately 15% after gzip. However, this build method can not be used on full builds, as they exceed the 1000kb limit on the closure compiler webservice. git-svn-id: http://svn.openlayers.org/trunk/openlayers@11443 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- build/build.py | 11 ++++++++--- tools/closure_ws.py | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 tools/closure_ws.py 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