JavaScript build options/tools
Question: These days I find myself shifting out more and more work to the client side
and hence my JS files tend to get bigger and bigger. I have come to the point
where most HTML pages have half a dozen or more JS imports in the header and I
realised that this is hurting loading times.

I have recently discovered this
[script](http://www.hunlock.com/blogs/Supercharged%5FJavascript) which lets
you download several JS files with one HTTP request. It is written in PHP and
being a Django fan I'm planning to rewrite it in Python. I'm planning to use a
HTTP redirect to the pre-minified and concatenated file and was wondering what
the cost of a 301 would be. Please let me know if that is a stupid idea.

On the other hand, am little worried about introducing scripting logic into
the serving of static files and I was wondering if there is a viable build
alternative like, say, an ant task that concatenates and minifies JS files and
replaces multiple JS downloads in a HTML header with one big one, like the
script does.


Answer: For PHP I certainly favour doing it dynamically just because if you introduce
a build step you're losing one of the main benefits of using PHP. In fact, at
the risk of self-promotion I've written [Supercharging Javascript in
PHP](http://www.cforcoding.com/2009/05/supercharging-javascript.html) about
this very issue.

Of course other technologies may vary.

Again it is PHP but it's not just a lump of code for you to use (although you
can jump straight to [Part 6](http://www.cforcoding.com/2009/05/supercharging-
javascript-part-6.html) if you just want some fully working code) and may have
value to you in terms of identifying the issues and doing things the right way
and why you do them that way.

I favour having bundles of Javascript files (maybe only one for the entire
application) and then each page simply activates the behaviour it needs
through standard means but all the code bodies are in the larger cached and
minified JS file. It works out fastest this way and is a good way to go.

If you do want it as part of a build process, which is a reasonable solution
if you have a build process anyway, then I suggest you minify your code. There
are lots of tools to do this. Have a look at [YUI
Compressor](http://developer.yahoo.com/yui/compressor/).

If you do a static combine of JS files, the other stuff mentioned above such
as gzipping and associated issues is still relevant.

