Firefox Tweaks
Some Firefox performance tweaks
Store your profile in a virtual memory filesystem aka TMPFS
-
create a mount entry to keep your profile in memory, edit
/etc/fstab
and adjust<XXX>
tmpfs /home/<USER>/.mozilla/firefox/<PROFILE_ID>.default \ tmpfs \ size=196M,noauto,user,exec,uid=<UID>,gid=<GID> \ 0 0
-
create a sync directory to persist your profile during reboots
mkdir ~/.mozilla/firefox/<PROFILE_ID>.default.sync
-
save this shell script under
~/bin/ffsync.sh
#!/bin/sh # syncs a firefox profile with a storage directory # www.christoph-polcin.com # Change this to match your correct profile ID="<PROFILE_ID>.default" PROFILE="${HOME}/.mozilla/firefox/${ID}" EXCLUDES="--exclude .unpacked \ --exclude lock \ --exclude .parentlock \ --exclude Cache \ --exclude Cache.Trash \ --exclude urlclassifier*"; [ ! -e "$PROFILE" ] && exit 1 if ! grep -Fqs "${PROFILE}" < /etc/mtab; then mount "${PROFILE}" if ! grep -Fqs "${PROFILE}" < /etc/mtab; then exit 1 fi fi if test -f "${PROFILE}/.unpacked"; then rsync -avq --delete ${EXCLUDES} "${PROFILE}/" "${PROFILE}.sync/" else rsync -avq "${PROFILE}.sync/" "${PROFILE}/" touch "${PROFILE}/.unpacked" # optimizes databases find "${PROFILE}" -name \*.sqlite \ -exec sqlite3 {} vacuum \; \ -exec sqlite3 {} reindex \; fi
-
create a cron job to trigger the sync
# crontab -e */8 * * * * ~/bin/ffsync.sh
-
invoke this script during boot or in
~/.xinitrc
Custom settings
Look up details at MozillaZine Knowledge Base.
// ~/.mozilla/firefox/__PROFILE_ID__.default/user.js // www.christoph-polcin.com // vim: ft=javascript foldmethod=marker // ui {{{ user_pref("image.animation_mode", "none"); user_pref("browser.fullscreen.animateUp", 0); user_pref("browser.panorama.animate_zoom", false); user_pref("browser.tabs.animate", false); user_pref("browser.urlbar.hideGoButton", true); user_pref("browser.urlbar.autoFill", true); user_pref("browser.urlbar.clickSelectsAll", true); user_pref("layout.word_select.eat_space_to_next_word", true); // }}} // search {{{ user_pref("keyword.URL", "https://duckduckgo.com/?kc=1&kd=-1&ke=-1&kg=g&kh=1&ki=1&kj=b2&kk=s&km=l&kn=1&kp=-1&kq=-1&kr=-1&ks=m&kv=-1&kw=w&kx=o&kz=1&k1=-1&k2=1&q="); user_pref("accessibility.typeaheadfind.casesensitive", 0); // }}} // safe browsing {{{ user_pref("browser.safebrowsing.enable", false); user_pref("browser.safebrowsing.malware.enable", false); // }}} // security {{{ user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true); user_pref("security.ssl.require_safe_negotiation", true); // }}} // tabs {{{ user_pref("browser.tabs.loadBookmarksInBackground", true); user_pref("browser.tabs.loadInBackground", true); user_pref("browser.tabs.warnOnClose", false); user_pref("browser.tabs.warnOnOpen", false); // }}} // downloads {{{ user_pref("browser.download.manager.closeWhenDone", true); user_pref("browser.download.useDownloadDir", false); // }}} // core {{{ user_pref("config.trim_on_minimize", false); // disable swap user_pref("browser.shell.checkDefaultBrowser", false); user_pref("pref.advanced.javascript.disable_button.advanced", false); user_pref("nglayout.initialpaint.delay", 0); // render page immediately user_pref("plugin.expose_full_path", true); user_pref("content.interrupt.parsing", true); // }}} // cookies {{{ // 0: all allowed // 1: Only cookies from the originating server are allowed. // 2: disable all user_pref("network.cookie.cookieBehavior", 1); user_pref("network.cookie.lifetime.days", 1); user_pref("network.cookie.lifetimePolicy", 2); // }}} // network {{{ user_pref("network.dns.disableIPv6", false); user_pref("network.http.pipelining", true); user_pref("network.http.pipelining.maxrequests", 6); user_pref("network.http.pipelining.ssl", true); user_pref("network.http.proxy.pipelining", true); user_pref("network.http.max-connections-per-server", 12); user_pref("network.http.sendRefererHeader", 0); user_pref("network.prefetch-next", false); // }}} // scripts {{{ user_pref("dom.allow_scripts_to_close_windows", false); user_pref("dom.disable_window_move_resize", true); user_pref("dom.disable_window_status_change", true); // }}} // dev {{{ user_pref("view_source.editor.external", true); user_pref("view_source.editor.path", "/usr/bin/gvim"); // }}}