Speeding up Firefox the right way

Speeding up Firefox seems to be a meme going around the blogsphere lately. Most of the tips I’ve seen, though, are only for broadband connections with the latest hardware and only include some of the settings that would affect performance.

The Firefox Tweak Guide has the full details on how to speed up Firefox regardless of your connection or hardware, reprinted in part below. Don’t forget that the easiest way to tweak user files is with chromEdit extension.

Common to all configurations

These are the settings that seem to be common to all configuration files regardless of connection speed or computer speed with a couple of additions – plugin paths can be found with about:plugins and the bookmark menu delay is turned off.

A couple settings of note – Firefox is allocated 4096 KB of memory by default and in this configuration we give it roughly 65MB as denoted by the last line. This can be changed according to what is used.

Fast Computer, Slower Connection

This configuration is more suited to people without ultra fast connections. We are not talking about dial up connections but slower DSL / Cable connections.

9) Has anybody tried these new optimized settings for Mozilla/Firefox? They’re tweaked and they give a big speed boost!

A:There appear to be a bunch of optimizations circling around which claim you can speed up your surfing if you’re on a broadband connection. Before you apply any such tweaks, it’s important to understand which category they fall into:

Pipelining Tweaks

These usually take the form of telling you to adjust settings in the "network.http.pipelining…" tree. These are quite safe, but may cause problems with older web servers which do not understand pipelining properly. Pipelining works by sending requests simultaneously over a single connection – this avoids the delay incurred by the latency between you and the server. Traditionally, HTTP clients go:

REQUEST ->

<- RESPONSE

REQUEST ->

<- RESPONSE

Pipelining changes this to:

REQUEST REQUEST ->

<- RESPONSE RESPONSE

This is a good optimization/tweak to apply as it increases speed for both you and the web server.

Connection Tweaks

The "other" type of optimization commonly seen instructs you to alter the "network.http.max-persistent-connections-per-server", "network.http.max-connections-per-server" and other related settings. These are EXTREMELY DAMAGING "optimizations" to apply and should be avoided at all costs. These settings violate the HTTP protocol, which recommends a limit of 2 connections per server. When you increase it beyond that, a lot of bad things begin to happen:

The web server is often the hardest hit. The Apache web server maintains a number of "slots" which are processes lying around to handle requests as they come in. Since they usually come in at a steady rate, the server can create and destroy extra processes as needed to handle the load. When you and your "optimized" settings hit the server however, almost all of the slots that are idle are suddenly taken up by your browser. This forces the server to suddenly create a bunch of new processes to handle other traffic which is a CPU-intensive task. When you are done hogging up the slots, the server suddenly finds itself with way more processes than are needed for normal traffic, so it will kill off the extra ones.

What’s worse is that since most tweaks involve such a high number of connections, once one element has been transferred, the connection is never used again. This forces the web server to hold all the connections in "keepalive" state as under normal circumstances, more than one request is sent per connection. TCP never gets a chance to automatically find the best RWIN for greatest speeds, load on routers between you and the server is increased thanks to all the extra packets… the whole basis of the HTTP/1.1 specification was to get away from the "one connection per element" days of HTTP/1.0, by applying these tweaks you are simply going back to the 1.0 days.

It’s also worth pointing out that there exists an Apache module and netfilter settings that could cause your additional connections to be blocked from the server, resulting in very slow page load times, broken images and possibly even a complete IP ban for this "flooding" behaviour. Please, stick with pipelining and do not touch these settings. There is a very good reason why they are not the default.

If you have read and understood this entry thoroughly, you will notice that enabling pipelining will give you HIGHER performance than increasing the maximum number of connections! This is because with pipelining, even though there are only 2 connections to the target web server, you are still sending all your requests at once. Since you are re-using the same connection, TCP has a chance to tune the Receive Window, keep-alive is made useful and everyone is happy.

Here is a link to a mozillaZine thread for those interested in what some of the "voodoo" tuning variables do. Perhaps "Speeding up Firefox the right way" was written to avoid that confusing mess, but it is a good reference nontheless. There are quite a few trial and error posts that have proven quite helpful to me many times in the past.