Difference between revisions of "Firefox/Profile on RAM"

From ArchWiki
Jump to: navigation, search
(wikify some external links, use https for archlinux.org)
(rm Template:Move, article moved)
 
(33 intermediate revisions by 18 users not shown)
Line 1: Line 1:
[[Category:Scripts]]
+
[[Category:Web browser]]
[[Category:Web Browser]]
+
 
[[de:Firefox-Profile in Ramdisk auslagern]]
 
[[de:Firefox-Profile in Ramdisk auslagern]]
Assuming that there is memory to spare, caching all, or part of [[Firefox]]'s profile to RAM using [[Wikipedia:tmpfs|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:
+
[[ja:Firefox Ramdisk]]
*reduced disk read/writes
+
[[ru:Firefox on RAM]]
*heightened responsive feel
+
Assuming that there is memory to spare, placing [[Firefox]]'s cache or complete profile to RAM 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:
*many operations within Firefox, such as quick search and history queries, are nearly instantaneous
+
*reduced drive read/writes;
 +
*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 [[tmpfs]].
+
To do so we can make use of a [[tmpfs]].
  
Because data placed therein cannot survive a shutdown, a script used when [[#Relocating the entire profile to RAM|moving the whole profile to RAM]] overcomes this limitation by syncing back to disk prior system shut down, whereas [[#Relocating only the cache to RAM|only relocating the cache]] is a quick, less inclusive solution.
+
Because data placed therein cannot survive a shutdown, a script responsible for syncing back to drive prior to system shutdown is necessary if persistence is desired (which is likely in the case of profile relocation). On the other hand, only relocating the cache is a quick, less inclusive solution that will slightly speed up user experience while emptying Firefox cache on every reboot.
  
==Method 1: Use RAM-only cache==
+
{{note|Cache is stored '''separately''' from Firefox default profiles' folder ({{ic|/home/$USER/.mozilla/firefox/}}): it is found by default in {{ic|/home/$USER/.cache/mozilla/firefox/<profile>}}. This is similar to what Chromium and other browsers do. Therefore, sections [[#Place profile in RAM using tools]] and [[#Place profile in RAM manually]] '''don't deal''' with cache relocating and syncing but only with profile adjustments. See the note at [[Profile-sync-daemon#Benefits of psd]]{{Broken section link}} for more details. [[Anything-sync-daemon]] may be used to achieve the same thing as Option 2 for cache folders.}}
Firefox can be configured to use only RAM as cache storage. Configuration files, bookmarks, extensions etc. will be written to harddisk/SSD as usual. For this
+
 
 +
==Relocate cache only to RAM==
 +
 
 +
When a page is loaded, it can be cached so it doesn't need to be downloaded to be redisplayed. For e-mail and news, messages and attachments are cached as well.
 +
Firefox can be configured to use only RAM as cache storage. Configuration files, bookmarks, extensions etc. will be written to drive as usual. For this:
 
* open {{Ic|about:config}} in the address bar
 
* open {{Ic|about:config}} in the address bar
 
* set {{Ic|browser.cache.disk.enable}} to "false" (double click the line)
 
* set {{Ic|browser.cache.disk.enable}} to "false" (double click the line)
* set {{Ic|browser.cache.memory.enable}} to "true" (double click the line)
+
* verify that {{Ic|browser.cache.memory.enable}} is set to "true" ([http://kb.mozillazine.org/Browser.cache.memory.enable default value])
* set {{Ic|browser.cache.memory.max_entry_size}} to the ammount of KB you'd like to spare, to -1 for [http://kb.mozillazine.org/Browser.cache.memory.capacity#-1 automatic] cache size selection
+
* add the entry (right click->new->integer) {{Ic|browser.cache.memory.capacity}} and set it to the amount of KB you'd like to spare, or to -1 for [http://kb.mozillazine.org/Browser.cache.memory.capacity#-1 automatic] cache size selection. (Skipping this step has the same effect as setting the value to -1.)
Main disadvantages of this method are that your tabs won't survive a browser crash, and that you need to configure the settings each user individually. On the other hand on a personal system it probably is the easiest method to implement.
+
Main disadvantages of this method are that the content of currently browsed webpages is lost if browser crashes or after a reboot, and that the settings need to be configured for each user individually.
  
==Method 2: Use PKG from the AUR==
+
A workaround for the first drawback is to use [[anything-sync-daemon]] or similar periodically-syncing script so that cache gets copied over to the drive on a regular basis.
Relocate the browser profile to [[wikipedia:Tmpfs|tmpfs]] filesystem, including {{ic|/tmp}} for improvements in application response as the the entire profile is now stored in RAM. Another benefit is a reduction in disk read and write operations, of which SSDs benefit the most.
+
 
 +
== Place profile in RAM using tools ==
 +
Relocate the browser profile to [[tmpfs]] so as to globally improve browser's responsiveness. Another benefit is a reduction in drive I/O operations, of which [[SSD#Locate_High-Use_Files_to_RAM|SSDs benefit the most]]{{Broken section link}}.
  
 
Use an active management script for maximal reliability and ease of use.  Several are available from the AUR.
 
Use an active management script for maximal reliability and ease of use.  Several are available from the AUR.
  
 
*{{AUR|profile-sync-daemon}} - refer to the [[Profile-sync-daemon]] wiki article for additional info on it;
 
*{{AUR|profile-sync-daemon}} - refer to the [[Profile-sync-daemon]] wiki article for additional info on it;
*{{AUR|firefox-tmpfs-daemon}}
 
 
*{{AUR|firefox-sync}}
 
*{{AUR|firefox-sync}}
  
==Method 3: Build your own system ==
+
==Place profile in RAM manually ==
 
+
===Before you start===
===Relocating only the cache to RAM===
+
<small>''Adapted from [https://bbs.archlinux.org/viewtopic.php?pid=604369 this forum post]''</small>
+
 
+
After entering {{Ic|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''
+
 
+
Upon restarting Firefox, it will start using {{ic|/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.
+
 
+
Alternative way: in /etc/fstab
+
 
+
  tmpfs    /home/<user>/.mozilla/firefox/default/Cache tmpfs mode=1777,noatime 0 0
+
 
+
===Relocating the entire profile to RAM===
+
====Before you start====
+
 
Before potentially compromising Firefox's profile, be sure to make a backup for quick restoration. Replace {{Ic|xyz.default}} as appropriate and use {{Ic|tar}} to make a backup:
 
Before potentially compromising Firefox's profile, be sure to make a backup for quick restoration. Replace {{Ic|xyz.default}} as appropriate and use {{Ic|tar}} to make a backup:
 
  $ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/''xyz.default''
 
  $ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/''xyz.default''
  
====The script====
+
===The script===
 
<small>''Adapted from [http://www.verot.net/firefox_tmpfs.htm verot.net's Speed up Firefox with tmpfs]''</small>
 
<small>''Adapted from [http://www.verot.net/firefox_tmpfs.htm verot.net's Speed up Firefox with tmpfs]''</small>
  
Line 93: Line 82:
 
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.
 
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====
+
===Automation===
 
Seeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.
 
Seeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.
  
=====cron job=====
+
====cron job====
 
Manipulate the user's [[cron]] table using {{Ic|crontab}}:
 
Manipulate the user's [[cron]] table using {{Ic|crontab}}:
 
  $ crontab -e
 
  $ crontab -e
Line 105: Line 94:
 
  0 */2 * * * ''~/bin/firefox-sync''
 
  0 */2 * * * ''~/bin/firefox-sync''
  
=====Sync at login/logout=====
+
====Sync at login/logout====
Deeming [[bash]] is being used, add the script to the login/logout files:
+
Assuming [[bash]] is being used, add the script to the login/logout files:
 
  $ echo '<i>~/bin/firefox-sync</i>' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
 
  $ echo '<i>~/bin/firefox-sync</i>' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
 
{{Note| You may wish to use {{ic|~/.bash_profile}} instead of {{ic|~/.bash_login}} as bash will only read the first of these if both exist and are readable.}}
 
{{Note| You may wish to use {{ic|~/.bash_profile}} instead of {{ic|~/.bash_login}} as bash will only read the first of these if both exist and are readable.}}
  
 
==See also==
 
==See also==
* [[Fstab#tmpfs]]
+
* [[tmpfs]]

Latest revision as of 09:13, 12 October 2016

Assuming that there is memory to spare, placing Firefox's cache or complete profile to RAM 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 drive read/writes;
  • heightened responsive feel;
  • many operations within Firefox, such as quick search and history queries, are nearly instantaneous.

To do so we can make use of a tmpfs.

Because data placed therein cannot survive a shutdown, a script responsible for syncing back to drive prior to system shutdown is necessary if persistence is desired (which is likely in the case of profile relocation). On the other hand, only relocating the cache is a quick, less inclusive solution that will slightly speed up user experience while emptying Firefox cache on every reboot.

Note: Cache is stored separately from Firefox default profiles' folder (/home/$USER/.mozilla/firefox/): it is found by default in /home/$USER/.cache/mozilla/firefox/<profile>. This is similar to what Chromium and other browsers do. Therefore, sections #Place profile in RAM using tools and #Place profile in RAM manually don't deal with cache relocating and syncing but only with profile adjustments. See the note at Profile-sync-daemon#Benefits of psd[broken link: invalid section] for more details. Anything-sync-daemon may be used to achieve the same thing as Option 2 for cache folders.

Relocate cache only to RAM

When a page is loaded, it can be cached so it doesn't need to be downloaded to be redisplayed. For e-mail and news, messages and attachments are cached as well. Firefox can be configured to use only RAM as cache storage. Configuration files, bookmarks, extensions etc. will be written to drive as usual. For this:

  • open about:config in the address bar
  • set browser.cache.disk.enable to "false" (double click the line)
  • verify that browser.cache.memory.enable is set to "true" (default value)
  • add the entry (right click->new->integer) browser.cache.memory.capacity and set it to the amount of KB you'd like to spare, or to -1 for automatic cache size selection. (Skipping this step has the same effect as setting the value to -1.)

Main disadvantages of this method are that the content of currently browsed webpages is lost if browser crashes or after a reboot, and that the settings need to be configured for each user individually.

A workaround for the first drawback is to use anything-sync-daemon or similar periodically-syncing script so that cache gets copied over to the drive on a regular basis.

Place profile in RAM using tools

Relocate the browser profile to tmpfs so as to globally improve browser's responsiveness. Another benefit is a reduction in drive I/O operations, of which SSDs benefit the most[broken link: invalid section].

Use an active management script for maximal reliability and ease of use. Several are available from the AUR.

Place profile in RAM manually

Before you start

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:

firefox-sync
#!/bin/sh

static=main
link=xyz.default
volatile=/dev/shm/firefox-$USER

IFS=
set -efu

cd ~/.mozilla/firefox

if [ ! -r $volatile ]; then
	mkdir -m0700 $volatile
fi

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 firefox-bin
$ 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

Assuming bash is being used, add the script to the login/logout files:

$ echo '~/bin/firefox-sync' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
Note: You may wish to use ~/.bash_profile instead of ~/.bash_login as bash will only read the first of these if both exist and are readable.

See also