Skip to content

Instantly share code, notes, and snippets.

@RubenKelevra
Last active June 25, 2024 23:11
Show Gist options
  • Save RubenKelevra/fd66c2f856d703260ecdf0379c4f59db to your computer and use it in GitHub Desktop.
Save RubenKelevra/fd66c2f856d703260ecdf0379c4f59db to your computer and use it in GitHub Desktop.
Make Firefox fast again

Recommended Extentions:

uBlock Origin

https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/

Settings

Make sure the following options are off:

  • Disable pre-fetching

Rationale: Not doing this will significantly slow down navigation, as Firefox won't prefetch any content before clicking.

JSLibCache

https://addons.mozilla.org/en-US/firefox/addon/jslibcache/

Settings

Make sure the following options are on:

  • Allow header modification

Rationale: Otherwise many Javascript libraries won't be fetched from local storage - as they have parameters on their URLs in the HTML code. This isn't going to break any website.`

Make sure to copy the uBlock rules provided, to your uBlock settings, to avoid uBlock interfering:

  1. Go to the uBlock rules
  2. copy them
  3. Open uBlock's Dashboard
  4. Go to the My rules tab
  5. Paste them & hit Save, then Commit

Cache Longer

https://addons.mozilla.org/en-US/firefox/addon/cache-longer/

Set and forget.

Rationale: Increases the time items will be stored in the browser cache. This increasing the chance that network ressources won't need to be fetched. As NVMe/SSD storage is cheap and lightning fast compared to network requests, this has the potential to improve load times significantly.

Recommended Browser settings

Normal Browser settings

  1. Go to about:preferences#privacy
  2. Select Custom
  3. deactivate all filters in this section
  4. Scroll down to Security -> Deceptive Content and Dangerous Software Protection
  5. Disable Block dangerous and deceptive content

Rationale: Those filters use a lot of CPU time to process, and are not very helpful - except for newbies. The Dangerous Software filters may actually even block downloads the user want to fetch, that's why it is recommended to disable these.

about:config settings

General tweaks

network.captive-portal-service.enabled = false # don't try to find captive portals
network.notify.checkForProxies = false # don't try to find proxies

Browser cache

browser.cache.disk.capacity = 8192000 # Increase cache size on disk to 8 GB
browser.cache.disk.smart_size.enabled = false # force a fixed max cache size on disk
browser.cache.frecency_half_life_hours = 18 # lower cache sweep intervals
browser.cache.max_shutdown_io_lag = 16 # let the browser finish more io on shutdown
browser.cache.memory.capacity = 2097152 # fixed maximum 2 GB in memory cache
browser.cache.memory.max_entry_size = 327680 # maximum size of in memory cached objects
browser.cache.disk.metadata_memory_limit = 15360 # increase size (in KB) of "Intermediate memory caching of frequently used metadata (a.k.a. disk cache memory pool)"

GFX rendering tweaks:

gfx.canvas.accelerated = true
gfx.canvas.accelerated.cache-items = 32768	
gfx.canvas.accelerated.cache-size	= 4096	
layers.acceleration.force-enabled = false
gfx.content.skia-font-cache-size = 80	
gfx.webrender.all = true	
gfx.webrender.compositor = true	
gfx.webrender.compositor.force-enabled = true	
gfx.webrender.enabled = true	
gfx.webrender.precache-shaders = true	
gfx.webrender.program-binary-disk = true
gfx.webrender.software.opengl = true
image.mem.decode_bytes_at_a_time = 65536	
image.mem.shared.unmap.min_expiration_ms = 120000	
layers.gpu-process.enabled = true
layers.gpu-process.force-enabled = true
image.cache.size = 10485760
media.memory_cache_max_size = 1048576	
media.memory_caches_combined_limit_kb = 3145728
media.hardware-video-decoding.force-enabled = true
media.ffmpeg.vaapi.enabled = true

Increase predictive network operations

network.dns.disablePrefetchFromHTTPS = false
network.dnsCacheEntries = 20000
network.dnsCacheExpiration = 3600
network.dnsCacheExpirationGracePeriod = 240
network.predictor.enable-hover-on-ssl = true
network.predictor.enable-prefetch = true
network.predictor.preconnect-min-confidence = 20
network.predictor.prefetch-force-valid-for = 3600
network.predictor.prefetch-min-confidence = 30
network.predictor.prefetch-rolling-load-count = 120
network.predictor.preresolve-min-confidence = 10

Faster SSL

network.ssl_tokens_cache_capacity = 32768 # more TLS token caching (fast reconnects)

Disable network seperations

fission.autostart = false # disable enhanced protection between threads/processes of the browser (which uses LOADS of memory to do)
privacy.partition.network_state	= false # don't seperate the network state (e.g. the cache) by top level domains)

Reduce the number of processes

dom.ipc.processCount = 1
dom.ipc.processCount.webIsolated = 1

Rationale: By default Firefox launches as many processes as you got CPU cores. This is highly counter productive, as this leads to much more memory usage as necessary. In addition switching tabs may now result not only in having to load the content back from the swap into memory, but also swapped in duplicated libraries etc.

Finishing touches:

  • Restart firefox

Go to about:support then scroll down to "Places Database" and select "Verify Integrity". This will rewrite the database.

Scroll up again and select "Clear startup cache" on the right side.

  • Restart firefox

Nice to have extensions

I don't care about cookies

https://addons.mozilla.org/en-US/firefox/addon/i-dont-care-about-cookies/

Set and forget.

Bypass Paywalls Clean

https://addons.mozilla.org/en-US/firefox/addon/bypass-paywalls-clean/

Automatically bypass some paywalls.

Downside: Needs often new permissions, if an update adds a site to the supported list. - You'll get notified with an ! mark on your "hamburger menu" icon.

Consent-O-Matic

https://addons.mozilla.org/en-US/firefox/addon/consent-o-matic/

Set and forget.

Cookie AutoDelete

https://addons.mozilla.org/en-US/firefox/addon/cookie-autodelete/

Go to settings and make sure the following are off:

  • Show Notification After Automatic Cleanup
  • Enable Support for Container Tabs

SponsorBlock - Skip Sponsorships on YouTube

https://addons.mozilla.org/en-US/firefox/addon/sponsorblock/

Configure skip categories to your likings.

Changelog

2023-07-07

  • add browser.cache.disk.metadata_memory_limit
  • Remove "cache cleaning" from finishing touches (as it's not really necessary and confuses people)

2023-04-15

  • set layers.acceleration.force-enabled to false (as it may increase CPU usage)

2023-02-26

  • Remove uBlock Origin's Disable hyperlink auditing unckecking recommendation (no idea why I've added that)
  • Organize Settings for Add-Ons under headlines
  • Improve explanation of how to apply JSLibCache's uBlock rules
  • Add Rationale to some settings, to avoid that people have to google
  • Fix browser.cache.frecency_half_life_hours
  • Minor changes/fixes to formatting
  • Reduce process counter down to one
@RubenKelevra
Copy link
Author

RubenKelevra commented Apr 26, 2024

Super awesome guide, been using these tips for a few weeks.

As always with a page of random tweaks.. Don't blindly apply everything, understand what you're doing. :-)

I ended up not tuning as much memory, instead opting for disk access, as it's just as fast for me and uses less memory.

Hey @joshuataylor,

Yeah if you got a fast disk, you certainly can do that. I just found that reducing the number of processes freed a lot of memory, but Firefox feels like it drops nearly everything in the memory cache for some reason and starts lagging when scrolling on a page with a lot of images when I'm doing that. Like it rerendered the web page on the tab switch but then needs to load all the images from disk while scrolling again, creating a stuttering scrolling experience.

It nearly went away as I pinned the cache size to a fixed amount in memory.

You might see issues when using the addon Cache Longer, I've had issues with random caching issues due to sites actually expiring certain parts and those being cached, or something weird like that with certain sites.

Sure, that's possible. In this case refresh the page with a forced reload: Ctrl+F5

I don't think I've encountered it before, but surely there's a possibility if something has been updated in the background and the paths stay the same.

It would be actually really cool now I think of it to have what dnsmasq has which ismin-cache-ttl, where you can set the minimum time things should be DNS cached for. Many places use absurdly low times, and for me DNS resolution is kinda slow due to latency (I'm in a fairly remote city).

Yeah, but Firefox already does DNS caching on its own. That's what network.dnsCacheExpiration is for, IIRC.

Caching stuff is great, as it's not the download speed (for me), but the latency/request cycle etc.

Yeah, same here. Latency can be atrocious if I'm on the go. Having heavy caching certainly help to reduce the amount of request just asking for the same bytes you already fetched a thousand times before.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment