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.

user_pref(“network.http.pipelining”, true);
user_pref(“network.http.proxy.pipelining”, true);
user_pref(“network.http.pipelining.maxrequests”, 8);
user_pref(“content.notify.backoffcount”, 5);
user_pref(“plugin.expose_full_path”, true);
user_pref(“ui.submenuDelay”, 0);

Fast Computer Fast Connection

user_pref(“content.interrupt.parsing”, true);
user_pref(“content.max.tokenizing.time”, 2250000);
user_pref(“content.notify.interval”, 750000);
user_pref(“content.notify.ontimer”, true);
user_pref(“content.switch.threshold”, 750000);
user_pref(“nglayout.initialpaint.delay”, 0);
user_pref(“network.http.max-connections”, 48);
user_pref(“network.http.max-connections-per-server”, 16);
user_pref(“network.http.max-persistent-connections-per-proxy”, 16);
user_pref(“network.http.max-persistent-connections-per-server”, 8);
user_pref(“browser.cache.memory.capacity”, 65536);

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.

user_pref(“content.max.tokenizing.time”, 2250000);
user_pref(“content.notify.interval”, 750000);
user_pref(“content.notify.ontimer”, true);
user_pref(“content.switch.threshold”, 750000);
user_pref(“network.http.max-connections”, 48);
user_pref(“network.http.max-connections-per-server”, 16);
user_pref(“network.http.max-persistent-connections-per-proxy”, 16);
user_pref(“network.http.max-persistent-connections-per-server”, 8);
user_pref(“nglayout.initialpaint.delay”, 0);
user_pref(“browser.cache.memory.capacity”, 65536);

Fast Computer, Slow Connection

user_pref(“browser.xul.error_pages.enabled”, true);
user_pref(“content.interrupt.parsing”, true);
user_pref(“content.max.tokenizing.time”, 3000000);
user_pref(“content.maxtextrun”, 8191);
user_pref(“content.notify.interval”, 750000);
user_pref(“content.notify.ontimer”, true);
user_pref(“content.switch.threshold”, 750000);
user_pref(“network.http.max-connections”, 32);
user_pref(“network.http.max-connections-per-server”, 8);
user_pref(“network.http.max-persistent-connections-per-proxy”, 8);
user_pref(“network.http.max-persistent-connections-per-server”, 4);
user_pref(“nglayout.initialpaint.delay”, 0);
user_pref(“browser.cache.memory.capacity”, 65536);

Slow Computer, Fast Connection

user_pref(“content.max.tokenizing.time”, 3000000);
user_pref(“content.notify.backoffcount”, 5);
user_pref(“content.notify.interval”, 1000000);
user_pref(“content.notify.ontimer”, true);
user_pref(“content.switch.threshold”, 1000000);
user_pref(“content.maxtextrun”, 4095);
user_pref(“nglayout.initialpaint.delay”, 1000);
user_pref(“network.http.max-connections”, 48);
user_pref(“network.http.max-connections-per-server”, 16);
user_pref(“network.http.max-persistent-connections-per-proxy”, 16);
user_pref(“network.http.max-persistent-connections-per-server”, 8);
user_pref(“dom.disable_window_status_change”, true);

One of the changes made for this particular configuration is the final line where the status bar is disabled for changing web pages to save processor time.

Slow Computer, Slow Connection

We have entered the doldrums of the dial-up user

user_pref(“content.max.tokenizing.time”, 2250000);
user_pref(“content.notify.interval”, 750000);
user_pref(“content.notify.ontimer”, true);
user_pref(“content.switch.threshold”, 750000);
user_pref(“nglayout.initialpaint.delay”, 750);
user_pref(“network.http.max-connections”, 32);
user_pref(“network.http.max-connections-per-server”, 8);
user_pref(“network.http.max-persistent-connections-per-proxy”, 8);
user_pref(“network.http.max-persistent-connections-per-server”, 4);
user_pref(“dom.disable_window_status_change”, true);

This entry was posted in Firefox. Bookmark the permalink. Follow any comments here with the RSS feed for this post.

17 Responses to Speeding up Firefox the right way

  1. wewa says:

    you should un italicize the config lines.

    you make it harder to copy/paste into our firefox configs.

    thanks.

  2. Josh says:

    _Persistant_ connections default to 2. That said, doubling the number of concurrant connections to a web server is, if nothing else, _rude_.

  3. me says:

    network.http.max-connections-per-server defaults to 8. Sure you don’t want to revise your little scary story up there?

  4. moeffju says:

    heretic:

    > are you off your swede? How is forcing me to decompress the binary and dlls before executing going to make things _faster_?

    Disk I/O is more expensive than memory I/O and CPU. Thus loading a smaller file, but decompressing it in memory, can be faster.

  5. Josh says:

    The network.http.max-* tweaks are _bad_.

    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.

    From http://forums.somethingawful.com/showthread.php?threadid=1140297

  6. heretic says:

    lenetky:

    ‘One way to speed up loading firefox is to compress it’s exe and dll libraries.

    You’ll get smaller exe size, thus shorter loading time…"

    are you off your swede? How is forcing me to decompress the binary and dlls before executing going to make things _faster_?

  7. bob says:

    fast computer fast connection and fast computer slow connection both have

    user_pref("content.interrupt.parsing", true);

    but fast computer slower connection does not have that setting: shurely shome mishtake?

  8. gongadze says:

    Hi svuntcake!

    Here is your quick command in batch file with decompress option.( for a symmetric world )

    #################################################

    @echo off

    goto upxFirefox%1

    :upxFirefox

    for %%v in (*.exe *.dll components\*.dll plugins\*.dll) do upx -v -9 %%v

    exit

    :upxFirefox-d

    for %%v in (*.exe *.dll components\*.dll plugins\*.dll) do upx -v -d %%v

    exit

    :upxFirefox-h

    echo Usage: upxFirefox [OPTION]

    echo Compresses the binaries without arguments

    echo .

    echo -d decompress the upxed firefox binaries.

    echo -h print this help.

    #################################################

  9. koz1000 says:

    How come I see all of these blogs mention these little config hacks to speed up Firefox, but nobody mentions the Moox custom builds?

    http://www.moox.ws/tech/mozilla/

    You might get a lot more speed out of a Firefox built for your K-RAD processor instead of a generic 586.

  10. svuntcake says:

    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.

    http://forums.mozillazine.org/viewtopic.php?t=53650

  11. Darrell says:

    Nick – At least a gigahertz processor with a decent amount of RAM.

  12. Nick Douglas says:

    For these directions, what’s the line between "slow" and "fast" computers?

  13. svuntcake says:

    Oops, I forgot the do portion ;)

    for %v in (*.exe *.dll components\*.dll plugins\*.dll) do upx "C:\Program Files\Mozilla Firefox\%v"

  14. svuntcake says:

    Here is a quick command to compress all .exe and .dll files with UPX.

    After downloading and extracting UPX, execute the following statement on the command line in the extracted directory:

    for %v in (*.exe *.dll components\*.dll plugins\*.dll) upx "C:\Program Files\Mozilla Firefox\%v"

  15. svuntcake says:

    Disabling IPv6 lookup can also greatly improve initial page load performance. It is enabled by default.

    user_pref("network.dns.disableIPv6", true);

  16. Darrell says:

    Thanks letenky, I will have to check that out.

  17. letenky says:

    Fine way to speed up loading firefox is to compress it’s exe and dll libraries.

    You’ll get smaller exe size, thus shorter loading time – it minimalizes the difference between IE and FF. With this and with tuning described in this article you’ll get the fastest browser ever build :)

    Pretty good tool is UPX.org [command line only, good compression ratio, freeware].

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>