JSMin: Javascript Compression

While at The Ajax Experience in October, I attended a presentation who spoke of the 3 C's (Combine, Compress, Cache) for Ajax development. In the Compress section I was introduced to the beauty of JSMin!

What is it? Well, shut up and I'll tell you.

Quoting Douglas Crockford (the creator of JSMin):

JSMin is a filter which removes comments and unnecessary whitespace from JavaScript files. It typically reduces filesize by half, resulting in faster downloads. It also encourages a more expressive programming style because it eliminates the download cost of clean, literate self-documentation.

As I've been creating more complex Javascript applications, the file size has been increasing (although the size is greatly reduced, thanks to jQuery). And, as a careful programmer should, I place comments all over my Javascript code so I don't draw too many blanks while updating/debugging...well, those comments tend to bloat the file size, as does the whitespace. The stripping of those elements alone has dropped the file-size of a number of my scripts by 40-50%! Thats huge. What previously was an 8K file goes down to 4K. Awesome.

If you're curious what JSMin does to your code, here's an example that Douglas gives:
Before

JavaScript:
  1. // is.js
  2.  
  3. // (c) 2001 Douglas Crockford
  4. // 2001 June 3
  5.  
  6.  
  7. // is
  8.  
  9. // The -is- object is used to identify the browser.  Every browser edition
  10. // identifies itself, but there is no standard way of doing it, and some of
  11. // the identification is deceptive. This is because the authors of web
  12. // browsers are liars. For example, Microsoft's IE browsers claim to be
  13. // Mozilla 4. Netscape 6 claims to be version 5.
  14.  
  15. var is = {
  16.     ie:      navigator.appName == 'Microsoft Internet Explorer',
  17.     java:    navigator.javaEnabled(),
  18.     ns:      navigator.appName == 'Netscape',
  19.     ua:      navigator.userAgent.toLowerCase(),
  20.     version: parseFloat(navigator.appVersion.substr(21)) ||
  21.              parseFloat(navigator.appVersion),
  22.     win:     navigator.platform == 'Win32'
  23. }
  24. is.mac = is.ua.indexOf('mac')>= 0;
  25. if (is.ua.indexOf('opera')>= 0) {
  26.     is.ie = is.ns = false;
  27.     is.opera = true;
  28. }
  29. if (is.ua.indexOf('gecko')>= 0) {
  30.     is.ie = is.ns = false;
  31.     is.gecko = true;
  32. }

After

JavaScript:
  1. var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'}
  2. is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;}
  3. if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}

As you can see...the result is not easily read so you'll want to keep your original script around in the event that editing is needed. Super cool. So how do you get it? Well...there's a number of languages that JSMin logic has been ported to: zip file containing
an MS-DOS.exe file
, or you can get the C source code and build it yourself. Now in C# and Java and JavaScript and Perl and PHP and Python and Ruby.

If you haven't thought about Javascript compression yet, you might want to start. Try it out...you'll be happy you did. Oh, and if you are curious: the Javascript implementation of JSMin is my favorite as it gives some excellent feedback and comment options on compression.

Discuss This Article


5 Responses to “JSMin: Javascript Compression”

  1. AvatarWandering Pig Effer

    I use this tool for JS compression - strips comments and whitespace.

    http://alex.dojotoolkit.org/shrinksafe/

    Reply to this comment.
    1
  2. AvatarMatt
    Author Comment

    Nice. Thats one that was discussed at the Ajax Experience as well…I’ll give it a look-see.

    Reply to this comment.
    2
  3. AvatarJeff

    So can any of these shrinkers be included in an ant build script?

    Reply to this comment.
    3
  4. AvatarMatt Haynes

    Apache Ant task that interfaces with Douglas Crockford’s JSMin program.

    http://code.google.com/p/jsmin-ant-task/

    Reply to this comment.
    4
  5. AvatarFilip

    This method is intended to produce minified js files and not compressed files like gz or zip, also possible and very useful for bandwidth reduction.

    Reply to this comment.
    5

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Comment Preview:

 (938) - how to use jsmin (29) - js compress (28) - javascript Compress (24) - jsmin (22) - php compress javascript (13) - js compression (12) - jsmin usage (9) - php javascript compress (8) - compression js (8) - JSMin.exe (6) - download jsmin (5) - jsmin example (5) - use jsmin (4) - compress javascript mac (4) - jsmin compress (3) - JSMin download (3) - how to run jsmin (3) - ant javascript (3) - javascript compress text (3) - jquery (3) - javascript compresser (3) - php js compress (3) - jsmin compression (3) - c# compress javascript (3) - javascript zip compress (3) - javascript compression zip (3) - JS minify compress (2) - jsmin ant (2) - compress javascript with php (2) - ant jsmin (2) - js compress php (2) - compress js to jsmin (2) - jsmin.exe usage (2) - javascript compress download (2) - compressing javascript php (2) - javascript compress with php (2) - php compress js (2) - how do you use jsmin (2) - Javascript compress c# (2) - c# javascript compression (2) - jsmin how to use (2) - javascript zip compression (2) - c# jsmin (2) - google javascript compress (2) - javascript compress php (2) - combine javascript ant script (2) - php jsmin bug (2) - jsmin how to (2) - navigator.appName MAC javascript (1) - compression javascript js (1) - javascript, compress, php (1) - JQuery compression JSMin (1) - php combiner compresser javascript (1) - navigator javaEnabled ie (1) - jsmin build ant task (1) - javascript file compression zip (1) - compressing javascript crockford (1) - js compression YUV (1) - javascript compress php python (1) - compressing javascript mac (1) - jsmin free download (1) - free download jsmin (1) - php zip javascript compress (1) - zip javascript compression (1) - free JS compression (1) - compression .js php (1) - use jsmin.exe (1) - compressing javascript perl (1) - Apache Ant compress javascript (1) - c# js compress (1) - ant compress javascript code (1) - compress javascripts (1) - php compress cache (1) - combine javascript compress (1) - compres javascript c# (1) - javascript compress tool jsmin (1) - python compress javascript (1) - javascript array zip compression (1) - compress js on mac (1) - compresser les js (1) - javascript combine compress (1) - navigator.appName=mac (1) - js compress yuv (1) - javascript compress php download (1) - jsmin bug (1) - javascript mac (1) - wordpress js compress (1) - php js compresser (1) - javascript compression comparison php (1) - JavaScript zip compression algorithm (1) - /w (1) - JS compression tool (1) - jsmin jquery (1) - javascript zip compressor (1) - php compress javascripts (1) - compressing javascript (1) - javascript compress zip (1) - zip compression in javascript (1) - compression C# javascript (1) - jsmin combine files (1) - JsMin php4 (1) - combine compress javascript php (1) - jquery compress javascript (1) - ant compress javascript (1) - javascript compression (1) - compression javascript (1) - compress javascript c# (1) - ant javascript compress (1) - Google javascript compression (1) - how to use jsmin exe (1) - javascript compress google (1) - combine javascript files mac (1) - jsmin dos (1) - javascript compression ant script (1) - jsmin use (1) - JSmin PHP 4 (1) - javascript minification for mac (1) - javascript combine ant (1) - compresser un js (1) - php js compression (1) - javascript compress ant (1) - crockford javascript compress (1) - .js compression script (1) - compresser code js mac (1) - using jsmin (1) - javascript indexof whitespace (1) - using jsmin to compress javascript (1) - ant javascript compressor (1) - indexof whitespace javascript (1) - compress and zip javascript (1) - JS Compression Comparison (1) - zip compression from javascript (1) - compresse javascript php (1) - how to use jsmin dos (1) - douglas crockford compression (1) - use jsmin glassfish (1) - use jsmin example (1) - compression.js javascript (1) - ant javascript toLowerCase (1) -