Speed-up Firefox using tmpfs
From ArchWiki
Assuming that there is memory to spare, caching all, or part of Firefox's profile to RAM using tmpfs offers significant advantages. Even though opting for the partial route is an improvement by itself, the latter can make Firefox even more responsive compared to its stock configuration. Benefits include, among others:
- reduced disk read/writes (ideal for SSD)
- heightened responsive feel
- many operations within Firefox, such as quick search and history queries, are nearly instantaneous
Both of previously mentioned options make use of native shared memory; /dev/shm, a directory that behaves just as ordinary mounted file systems do, only with the notable exception that all of its content is stored in RAM.
Because data placed therein find surviving a shutdown impossible, the script used when moving the whole profile to RAM overcomes this limitation by syncing back to disk prior system shut down, whereas only relocating the cache is a quick, less inclusive solution.
Contents |
Relocating only the cache to RAM
Adapted from this forum post
After entering about:config into the address bar, create a new string by right-clicking in the bottom half, selecting New, followed by String. Assign its value:
browser.cache.disk.parent_directory
Now, double-click the newly created string and direct it towards the RAM directory:
/dev/shm/firefox-cache
Finally, create the directory and ensure its permissions have security in mind:
install -dm700 /dev/shm/firefox-cache
Upon restarting Firefox, it will start using /dev/shm/firefox-cache as the cache directory. Do mind that the directory and its contents will not be saved after a reboot using this method.
Relocating the entire profile to RAM
Before potentially compromising Firefox's profile, be sure to make a backup for quick restoration. Replace xyz.default as appropriate and use tar to make a backup:
$ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/xyz.default
The script
Adapted from verot.net's Speed up Firefox with tmpfs
The script will first move Firefox's profile to a new static location, make a sub-directory in /dev/shm, softlink to it and later populate it with the contents of the profile. As before, replace the bold sections to suit. The only value that absolutely needs to be altered is, again, xyz.default.
Be sure that rsync is installed and save the script to ~/bin/firefox-sync, for example:
#!/bin/bash STATIC=main LINK=xyz.default VOLATILE=/dev/shm/$USER/firefox cd ~/.mozilla/firefox [[ -r $VOLATILE ]] || install -dm700 $VOLATILE if [[ `readlink $LINK` != $VOLATILE ]]; then mv $LINK $STATIC ln -s $VOLATILE $LINK fi if [[ -e $LINK/.unpacked ]]; then rsync -av --delete --exclude .unpacked ./$LINK/ ./$STATIC/ else rsync -av ./$STATIC/ ./$LINK/ touch $LINK/.unpacked fi
Close Firefox, make the script executable and test it:
$ killall firefox; chmod +x ~/bin/firefox-sync; ~/bin/firefox-sync
Run Firefox again to gauge the results. The second time the script runs, it will then preserve the RAM profile by copying it back to disk.
Automation
Seeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.
cron job
Manipulate the user's cron table using crontab:
$ crontab -e
Add a line to start the script every 30 minutes,
*/30 * * * * ~/bin/firefox-sync
or add the following to do so every 2 hours:
0 */2 * * * ~/bin/firefox-sync
Sync at login/logout
Deeming bash is being used, add the script to the login/logout files:
$ echo '~/bin/firefox-sync' | tee -a ~/.bash_logout ~/.bash_login >/dev/null