I would absolutely use a compressor, and have your server gzip the
files. Compressors do more than gzip -- they strip out comments too.
Write a build script to do the compression (YUI compressor, JSMin,
etc.) and run that script as part of your release process. On the
server side, use a switch to indicate whether your application is in
development or production mode. Based on the state of that switch,
point your application at the combined files in production and at the
individual files in development mode.

Having PHP do the gzipping is inefficient, IMO. The PHP has to run
every time someone requests the file anew; if you compress the files
as part of the release process, then they are static files that the
server simply has to serve.

Tom Hughes-Croucher from Yahoo had a great article about build scripts
in the June issue of JSMag (http://jsmag.com). You may also find Paul
Irish's post on "Markup-based unobtrusive comprehensive DOM-ready
execution" useful if you're looking at combining your JS files:
http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

On Jul 3, 5:24 am, Thijs Houtenbos <th...@thijshoutenbosdesign.nl>
wrote:
> When you work with a lot of separate scripts that have to be updated
> regularly you might find it easier to add them together autmatically
> (instead of manually each time).I wouldn't use a JS compressor, on each page
> load the entire document is parsed again and that can be a significant
> overhead on the page load. Use GZIP instead, it is much faster and the size
> is ok.
>
> My solution is a simple PHP script that serves the JS. I have a folder named
> 'scripts' with a lot of .js files and a single index.php.
> You just add: <script type="text/javascript" src="scripts/"></script>
>
> The PHP code looks something like this:
>
>   // WARNING: GZIP causes problems in IE6 when manually enabled. Just let
> the ob_gzhandler handle it.
>   ob_start("ob_gzhandler");
>
>   // Read JS
>   $modified = 0; $data = "";
>   foreach(glob("*.js") as $script) {
>     // Read script
>     $data .= "\n\n\n/* SCRIPT: $script */\n\n\n";
>     $data .= "try {\n";
>     $scriptdata = file_get_contents($script);
>     $data .= $scriptdata;
>     $data .= "} catch (e) { alert(\"Javascript error in $script: \" +
> e.name+ \" - \" + e.message); }\n";
>     $modified = max(filemtime($script), $modified);
>
>     // Add info to header
>     $scripts[$lines] = $script;
>     $lines += substr_count($scriptdata, "\n") + 8; // Add extra lines (6 + 2
> for JS)
>   }
>
>   // Headers
>   $ETag = '"' . md5($_SERVER['REQUEST_URI'] . $modified) . '"';
>   header('Content-type: atext/javascript'); // use '' for compatibility,
> application/x-javascript is not for every browser
>   header("Content-Disposition: inline; filename=script.js"); // Helps IE
> cache the file!!!
>   header("Cache-Control: public");
>   header("Cache-Control: max-age=123456");
>   header("Expires: " . gmdate("D, d M Y H:i:s", time() + 123456) . " GMT");
>   header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modified) . " GMT");
>   header("ETag: $ETag");
>
>   // Output
>   echo $data;
>
>   // End
>   ob_end_flush();
>
> You might have to change the headers a bit, and since i've cleaned it up a
> little I don't know if it's all perfect, but this is the general idea.
> The advantage is that the JS file is loaded in one chunk with GZIP encoding
> and is cached in all browsers (even in IE6). This is not as easy to achieve
> as you might think, all headers used for caching are different per browser!
> When you modify one of the files the last modified is also updated. In my
> own script I also check the Etag and return a 304 when it's the same, this
> also helps a lot!
>
> You can also add a lot of nice dynamic info with this, I have an index in
> the beginning with the lines where the different scripts start (easier to
> help debug), and some dynamic settings are added to the JS, like a login
> timeout warning etc.
>
> I hope this example can be of some use to you.
>
> Regards,
> THD
>
> On Thu, Jul 2, 2009 at 2:51 AM, Dave Methvin <dave.meth...@gmail.com> wrote:
>
> > In the simplest case, you should be able to download jsmin and run it
> > from a command line.
>
> >http://www.crockford.com/javascript/jsmin.html
>
> > jsmin.exe <first.js >minified.js "// Copyright (c) 2009 You and
> > Others"
> > jsmin.exe <second.js >>minified.js
> > jsmin.exe <third.js >>minified.js
>
> > Then include minified.js in your pages.
>
> > YUI Compressor does a better job, but the setup is a bit more complex:
>
> >http://developer.yahoo.com/yui/compressor/
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to