One of the problems any webmaster is facing that the site may be not fast enough to meet his expectations. How you can squeeze up that last drop of extra speed from your site? We published lots of tips on this theme, but let's reorganize and update them with possibilities of the latest Joomla implementation (1.5.10 as the original article was written, 1.7.3 on last update I wrote this). I try to present them in decreasing order of importance/effectiveness, but the actual order reflects mostly my personal experience - which may be different from yours - and not some rigorously measured facts. But, believe me, I have a good nose for this. Some of the tips are easy to implement - and some may need advanced knowledge. But I mixed them up there to let you know what you may need to check - or what you may need ask from your programmer/web developer.
This apparently inoffensive, but useful feature of a site can be actually the greatest resource hog you should get rid of. Joomla has his own statistics parts and lots of specialized components are around: stop using them!
You are far better if you use some external, free service as Google Analytics or something similar. These services are generally delivering same or far better dataset to use and - even better - you're offloading about 99% of statistics related load from your server.
The GZip page compression is perhaps the most overlooked setting in the Global Configuration from early days of Joomla. Most of servers used to host Joomla sites are supporting this feature, so go to system Info, check if you have the support for Gzip page compression, and if you have it - and in most of cases you will - check that radio button! You will stress a bit more the CPU of your server to zip the files delivered to your visitors, but the option - especially if you have a text heavy site - can dramatically reduce the bandwidth need - so your site probably will load significantly cached. Don't take it granted, tough... Experiment first, and decide based on the result. Try to use for your informal tests as many environments (operating system/browser/connection type/connection speed) as you can!
Yeah, a nifty template, with all sorts of gorgeous images/effects/flash snippets/audio effects can be eye catching. And lots of sites today are built with them. I call it "the boss-syndrome" because these sites are mainly built to please the eyes of who have the valet. He may pay more and faster if you have all this put together - but the visitors of your site will pay attention to your site? If you want to make them come back, you have to choose - you need to sell sex, drugs, hot gossips - or you need to make the site to load fast and to be easy to navigate. So, bottom-line: most of you will need a fast loading template with minimum of such trickery, all images/media files/scripts need to be optimized, and wisely used. Less can be more, don't forget that!
Yep, once again caching. The jury is still out on this, there are lots of reasons to use it or not (in nutshell: pro arguments - the faster load speed, the reduced stress on server vs. cons - the users will see not the actual site, but a cached one) but there are some facts to demolish the contra-arguments. Here are only one: an average connection from any given visitor to any web page is build on a chain of at least 20, at most 50 hosts. And about 50% of these hosts (from your own PC, home router, neighborhood router, company/corporate firewall, etc.) uses some sort of caching, so your users anyway will see a more or less cached - read not actual - version of your site. So, we can conclude, that such thing, as "live site" not really exist, so let's make then the version of the page they got at least as fast as can be: let's use caching!
How? Here is the portion of the game I can give only some tips. First of all, turn caching on on Global Configuration. Then, turn caching on on any components you may have installed and support any kind of caching. The best candidate for this is your SEF URL making component (We recommend sh404SEF, of course), but also others may be around supporting certain form of caching. Then, you may consider installing and using some specialized, Joomla cache enhancers. JoomlaPerformance.com has one of the best performing ones for the latest Joomla, but there are lot of other similar ones around, you can find something for any version of Joomla still out and running. Try them out, and see which one makes the biggest boost to your site. I'm repeating myself here, and I will do it again and again: experiment!
No two Joomla sites are behaving similarly here. You must find the component/tactics which are working together well and giving the biggest boost to your site!
There are lots of such things out there. As I wrote this, JED alone lists 4688 items, and this is only the best of the offering, the tip of the iceberg. Literally you have thousands to choose from. And this means that for a given purpose generally you have more, than one options. Not all of them are written equally, you can choose from masterpieces of coding art and bloated junkware alike. Plan well and choose carefully. Install and use what you really need! Just an example: do you have a single book to sell? then don't Install a full blown VirtueMart shop (my favorite component, BTW), use a lightweight, one-trick pony instead! And take a look around, you may end up on the day of launching a site with lot of gizmos you have installed in the search of the Holy Grail , but you dropped later - get rid of the unnecessary code!
Make a simple experiment: enable the debug mode and take a look to the output. If you have the needed SQL knowledge, in most of case you can detect lots of un-neded or badly built queries. Good components - and the Joomla core itself - generally don't suffer from this, but most of the gizmos around being contributions of programmers of widely varying level of knowledge, you may have lots of such bad queries. If that's the case, think seriously about replacing the misbehaving extension - or about to fix it and releasing the patched code to the community. Yep, thats the Open Source is all about!
Not everything is ported and working natively in Joomla - yet - so sometimes you may need to use a "bridge" to make the needed components to work together with Joomla. But, be aware that these bridges are real performance hogs. You will end up in having the desired functionality (from an external forum to a payment solution there can be lots of things you may desire to use together with Joomla), but in the same time you will have on your site two or more core apps - instead of one - running on your site. The bottom-line is simple - avoid the situation whenever is possible. Sometimes even worth the effort to port the external app to the Joomla, if you have the knowledge, time and free brainpower for it - and save others from this trap - and earn kudos from community.
A Joomla site can be viewed as a set-up-and-forget-it thing? Definitively, but is something you should avoid, for many reasons. Speed is only one of them. But don't forget, that all of the Joomla code-base is continuously improved, from core to components/add-ons. And on hosting side generally are happening new things all the time. So, it's good to have the content updated - but may be crucial, to have all the underlying nuts and bolts of your site up to date. The benefits are multiple, security and speed are generally the most cited ones.
Yea, this is something I referred to already here, but let's emphasize on. Same image can have widely different sizes depending in which format and whit which exact options you saved it. The differences can be of the magnitude of 20* - 40* between the unoptimized and the optimized image. Yeah, right, we are talking of 1,5kb vs. 50kb, for example! This isn't something specific to Joomla, but the rule applies here too. Grab your favorite image editing tool - or find something that fits you - and optimize your images!
Not only Windows, but your database too have the tendency to accumulate junk over time, and may need optimization. The cheapest and greatest tool is generally under your fingertips: go to your hosting accounts and click on that phpMyAdmin icon (is generally out there in 95% of hosting packages, but you may need a bit help in finding it). An take a look to your database tables: some of them may need optimization. Click on that "optimize" button. In worst case the optimization wasn't needed - but you ain't broke anything.
You may also consider one of the available add-ons (generally plugins) for Joomla. These are saving you from logging on the hosting admin panel ad locating that icon - but may be an overkill, see above what I said on the Components section. Here's that repeating phrase you may be missing it already: find the best combo for your site, use your brain, think and experiment.
Yes, this is for coders only. Check your code - and others code too . Get rid of anything unneeded. Keep the inline comments at minimum - but need the ones really needed. This may have minimal impact on the final balance, but is something worth attention. More important is to revisit your own code time-to-time. In the passed time you may learned some new tricks, and some better optimized code may came out after such revisions. Any line of better, more efficient code can add bits to the final sum - and speed up the site.
Missing pieces of the puzzle
All above was about what you have on the site. And one may think, that's enough to have that under control and optimized. Wait! That's not enough! The site can be seriously slowed down by things which aren't - or to be more precise, missing - from your site. Whenever the browser tries to retrieve something should be there and is actually missing, a HTML or CSS call for example, in most of the cases the time spent with requesting the missing bit of info and handling the error messages in most of cases is longer, than actually retrieving that info, if it's available. And more often that missing piece is referenced, the greater is the hit on the site's general performance.
The classical example of the situation is the missing favicon. This is something you generally don't link it to any piece of your webpage - but all modern browsers are looking for it. So make sure, you have one in the right place. But you may have other pieces missing. Take a look to your server logs - most hosting accounts have an easy way to do this - and examine especially the error log, this lists all requests unanswered properly by your webserver, as missing page items, missing pages, bad page requests and such. You may ending up discovering interesting things...
That's for now. But you can be sure on one thing: the above list will be updated. Maybe I will remember things... or maybe you will ask questions. Go ahead, folks, optimize your sites, and save couple of trees out there!!!