Is it "A JS JS mangler" (A JavaScript Mangler written in JavaScript) or AJ's JavaScript Mangler?
AJSJSMangler is a script that can mangle userscripts to make them smaller. Specifically object keys, which UglifyJS won't touch as far as I could tell. It can be used in addition to a minifier. Frankly it was just written to minify User:Alexis Jazz/Bawl more effectively. Will it work for your scripts too? Nobody knows
AJSJSMangler also has some options for whitespace removal. Compared to UglifyJS, AJSJSMangler is somewhat less efficient in that department. It's not too far off, for Bawl UglifyJS only shaves off another 7%. When used on its own (without AJSJSMangler's key mangling), UglifyJS performs much worse than AJSJSMangler for Bawl. AJSJSMangler is more likely to introduce problems as it hasn't been tested nearly as well as UglifyJS. On the other hand: AJSJSMangler doesn't necessarily make JSHint cry. The highest compression is achieved by using AJSJSMangler followed by UglifyJS.
If you didn't get the message yet, NO, this is not a polished tool!
Usage: run mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Alexis_Jazz/AJSJSMangler.js&action=raw&ctype=text/javascript');
from the JS console. (source) If you can't do that, this script is not for you. DO NOT PUT IN COMMON.JS. Paste your script, mangle it, then process it with a regular minifier like minJS or UglifyJS. (online demo: https://lisperator.net/uglifyjs/#demo)
Rules:
- The first occurrence of "window.myScriptsMainVariableName = {};" will be assumed to be the main variable of your script.
- This variable and its contents CANNOT be shared with other script files.
- If keys appear in strings anywhere you have a problem. Instead of writing you'll have to write
$('#firstHeading').append('<a onclick="myScript.doSomething()">Do something</a>');
$('#firstHeading').append('<a onclick="myScript.' + Object.keys(myScript)[Object.values(myScript).indexOf(myScript.doSomething)] + '()">Do something</a>');
- Put ALL your crap in there!
- Only myScriptsMainVariableName.someNameToBeMangled gets mangled. In myScriptsMainVariableName.someNameToBeMangled.someObject, "someObject" is SAFE from mangling.
- Any line that contains myScriptsMainVariableName.debug gets removed entirely.
- ZERO CHECKS IF THIS BREAKS YOUR SCRIPT. IF YOU FOLLOWED THE RULES AND ALL THE STARS ALIGN IT SHOULDN'T. PROBABLY. YMMV. PROVIDED AS IS. DO NOT BLINDLY APPLY THIS TO YOUR SCRIPTS.
- YOU DO NOT TALK ABOUT wait no
Example:
window.myScript = {};
var myScript = window.myScript;
myScript.text1 = 'Content text';
myScript.params = {'action':'edit','format':'json'};
myScript.paramsPreview = {'action':'parse','format':'json'};
myScript.debug = function(message) {
console.log(message);//myScript.debug
};//myScript.debug
myScript.params.text = myScript.text1;
myScript.debug('done');
Becomes:
window.myScript = {};
var myScript = window.myScript;
myScript.AA = 'Content text';
myScript.AB = {'action':'edit','format':'json'};
myScript.AC = {'action':'parse','format':'json'};
myScript.AB.text = myScript.AA;
Go mangle yourself
editSource script | Original size | AJSJSM | % or original | UglifyJS | %of original | AJSJSM+UglifyJS | %of original |
---|---|---|---|---|---|---|---|
AJSJSMangler.js | 21,486 bytes | 14,078 | 65.5% | 17,172 | 79.92% | 13,719 | 63.85% |