Last active
January 23, 2017 20:04
-
-
Save sherbondy/66dd2ba7500cf6b5d41203290228e699 to your computer and use it in GitHub Desktop.
Example of running google-closure-js in the browser via a Web Worker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<title>Closure Compiler JS Browser Demo</title> | |
</head> | |
<body> | |
<div> | |
<textarea id="src" name="" cols="80" rows="10"> | |
// example script | |
var x = 1; | |
function square(x) { | |
var y = (x*x); | |
return y; | |
} | |
var z = square(2); | |
console.log(z); | |
</textarea> | |
<button id="compile" onclick="compile_me()"> | |
compile | |
</button> | |
</div> | |
<div id="result" style="border: solid gray;"> | |
// the compilation will appear here | |
</div> | |
<script type="text/javascript"> | |
var compiler_worker = new Worker("worker.js"); | |
function compile_me(){ | |
var result = document.getElementById('result'); | |
result.innerText = "//compiling..."; | |
var input_src = document.getElementById("src").value; | |
var flags = { | |
jsCode: [{src: input_src}], | |
env: "CUSTOM", | |
compilationLevel: "SIMPLE" | |
}; | |
compiler_worker.postMessage(flags); | |
} | |
compiler_worker.onmessage = function(e) { | |
console.log("compilation result received from worker."); | |
result.innerText = e.data; | |
} | |
</script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
importScripts('jscomp.js'); | |
onmessage = function(e) { | |
console.log("Message received from main script."); | |
var flags = e.data; | |
var compiled_result = compile(flags); | |
console.log("Compilation completed, sending result to main process."); | |
postMessage(compiled_result.compiledCode); | |
} |
Also, if you are having trouble getting google-closure-compiler-js
setup/installed from source, here's a quick example of a shell session for setting things up so you actually wind up with a working jscomp.js
file:
https://gist.github.com/sherbondy/c589a215c3cdc6e12c9666d0706af581
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Unfortunately, this example does not work in Chrome Stable (55) as of writing this because of a bug in the call stack size for Web Workers. This severely limits the capability of Web Workers in Chrome and has bitten many folks (Google
chrome web worker maximum call stack size
)https://bugs.chromium.org/p/chromium/issues/detail?id=252492
Should be fixed in Chrome 56 release though!
(Tested and confirmed working in Chrome Canary)