jordi has posted 1 posts at DZone. You can read more from them at their website. View Full User Profile

Jawr 2.0: Bundles and Minifies, now for Grails and Facelets

04.23.2008
| 4146 views |
  • submit to reddit
Location: 
https:\\jawr.dev.java.net
The latest release of Jawr allows Facelets and Grails users to leverage its capabilities.

Jawr is an Open Source library which offers two complementary uses for java and groovy web applications in which javascript is heavily used:

  • First, it's a productivity tool, since it allows to develop javascript components in separate files, each representing a module, as opposed to having all the code in one or two files for performance reasons. Working with separate files makes development, maintenance and version control a lot easier.
  • On the other hand, Jawr is a performance tool which will perceivably improve page loading times. When in production mode, all the modules which were split in separate files are bundled together (into one or several files, as per configuration), then minified, then compressed and sent to the client using aggressive caching headers. This reduces the number of HTTP requests required to load a full page and also the size in kilobytes that a user must download. Jawr implements many of the good practices defined in this very interesting article which I recommend everyone to read: serving javascript fast.

Jawr is configured by adding a servlet to our application and creating a simple .properties file to configure the way components are to be bundled. CSS files can also benefit from bundling and compression. Once configured, a tag library (of either the JSP, Grails or Facelets kind) is used to reference the bundles previously defined.

These tags will work differently in development and production modes (which are set by a flag in the properties file). When in development mode, links to the separate, uncompressed modules are generated so that we can debug them using, say, Firebug. Each links gets a random parameter added to the URL so that upon every refresh of our page the browser is force to reload the script. On the other hand, in production mode links to the bundled, minified and compressed version of the scripts are generated. There is no need to change anything in the pages for this to happen, only a flag switch in the properties file is needed.

Other interesting features are, aside from the aforementioned Facelets and Grails integration, are the ability to define custom postprocessors to change dynamically the contents of bundled scripts, the ability to define global bundles that are always imported into pages automatically, defining bundles which are included within a defined conditional comment for MSIE, obfuscating the scripts, etc...

Jawr has an Apache 2.0 license, and can be configured to use JSmin or the YUI Compressor under the hood, both with a BSD style license. You can find all about it at https:\\jawr.dev.java.net
0
Average: 5 (1 vote)
Published at DZone with permission of its author, jordi Hernandez.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)