extreme javascript minification

9
Extreme Javascript Minification Compression experiments for JS13k by David Goemans BoosterMedia 2014

Upload: david-goemans

Post on 27-May-2015

649 views

Category:

Technology


0 download

DESCRIPTION

Minifying javascript is a standard industry practice, but for competitions such as JS13k you have to go pretty far. This presentation covers some advanced techniques, what works, and what doesn't, to get your code as crunched as possible.

TRANSCRIPT

Page 1: Extreme Javascript Minification

Extreme Javascript Minification

Compression experiments for JS13k

by David Goemans

BoosterMedia 2014

Page 2: Extreme Javascript Minification

• For JS13k, your delivered package needs to be 13kb or less

• It can be compressed but as a standard zip format

• This gives you about 90kb for actual code

• Many techniques available:• Uglify2JS• YUI• Closure• JS Crush & Packer

• Zip Formats are restrictive

• Renaming tricks ( Globals )

What?

Page 3: Extreme Javascript Minification

• Very good for day-to-day compress

• Node/Grunt module makes for super easy integration

• Works out of the box, virtually never requires code changes

• Compresses very well, but not well enough

Uglify2JS

Page 4: Extreme Javascript Minification

• With advanced compression, performs better than Uglify

• Minimal code changes required to make it compress well

• Compression is pretty good, but...

YUI

Page 5: Extreme Javascript Minification

• Great compression with advanced compilation

• Requires code changes, especially related to global variables

• Some APIs not recognized by the compiler, such as PointerLock

• Best compression for zipping

Closure

~75kb code ~26kb code

Page 6: Extreme Javascript Minification

• These are amazing pieces of technology.

• Crazy compression for javascript, much smaller .js files than the other options

• For best results, first run through Closure or Uglify with simple optimizations

• Since they're already so well compressed, they don't zip very well

• Not that useful for JS13k, and normal use, but great for JS1k!

JSCrush & Packer

Page 7: Extreme Javascript Minification

• Zip has a few algorithms you can use, but only deflate is widely supported

• Deflate is based on Huffman trees, which works by detecting patterns

• Lots of the same text close together compresses well

• This is why JSCrush/Packer doesn't zip very well!

• Each file generates some overhead• • Less files with shorter names is best

Zip

Page 8: Extreme Javascript Minification

• Remember, reserved words can't be minified.

• Re-define common long reserved names and attach to a global object

Instead of: gl.TEXTURE_MIN_FILTER

Global.js:var $;$.minFilterVar = 'TEXTURE_MIN_FILTER';

everywhere else:gl[$.minFilterVar]

• Seems longer at first, but compresses really well!

Extra tricks

Page 9: Extreme Javascript Minification

David GoemansLead developer @ BoosterMedia Game Studio

[email protected]

@dgoemans

About me

Links:

JS13k Project code: https://github.com/dgoemans/shipwrecked

Extra info on zip compression: https://gist.github.com/subzey/b18c482922cd17693d65