I’ve known about Google’s Javascript minifier, Closure Compiler, for awhile, but after sending a couple snippets through it today I realized it’s a pretty impressive piece of work.
Input:
function howManyMatch(arr, pattern) {
var l = arr.length;
var total = 0;
var i = 0;
for (; i < l; i++) {
if (pattern.test(arr[i])) {
total++;
}
}
return total;
}
Output:
function howManyMatch(b,d){for(var e=b.length,c=0,a=0;a<e;a++)d.test(b[a])&&c++;return c};
Or with whitespace re-added:
function howManyMatch(b, d) {
for (var e = b.length, c = 0, a = 0; a < e; a++)
d.test(b[a]) && c++;
return c
}
Optimizations:
- shortened parameter names and removed unneeded semicolons (YUI Compressor already did this much)
- combined multiple
var
statements into one declaration - moved that declaration into the first section of the for loop (to save one semicolon!)
- removed brackets around blocks with only one statement
- replaced
if
statement with&&
operator (to save two bytes)
Several of these are often done by JS devs by hand. With closure compiler on tap, we no longer have to. Just concentrate on readability and maintainability and let CC worry about size optimization.
Sweet!
I’m working on a project that I want to protect from reverse-engineering as much as I can. I’ll obfuscate the JS with Closure Compiler, but the project also uses a huge (3 MB) JSON file… any ideas on how to obfuscate JSON?