Firefox/プロファイルを RAM に置く

提供: ArchWiki
2021年2月11日 (木) 23:30時点におけるKgx (トーク | 投稿記録)による版 (→‎自動化: systemdの項目を翻訳して追加)
ナビゲーションに移動 検索に移動

メモリが余っている場合、Firefox のキャッシュやプロファイルを RAM に乗せることで大きなメリットが得られます。一部を選択するだけでも効果はありますが、全てを RAM に配置することで標準設定に比べて Firefox のレスポンスをさらに良くすることができます。以下のようなメリットがあります:

  • ドライブの読み書きが減る。
  • レスポンス性が高まる。
  • Firefox のクイック検索や履歴閲覧などの操作がほとんど瞬間的になる。

tmpfs を使うことで Firefox で RAM を利用することができます。

RAM 上のデータはシャットダウンすると消えてしまうため、(プロファイルを配置する場合など) データが消えないようにするには、システムがシャットダウンする前にドライブにデータを同期するスクリプトが必要になります。一方、キャッシュだけを再配置する場合は簡単に行うことができ、再起動するたびに Firefox のキャッシュが消去されるかわりに速度が少しだけ速くなります。

ノート: キャッシュは Firefox のデフォルトプロファイルフォルダ (/home/$USER/.mozilla/firefox/) とは別個に保存されています: デフォルトではキャッシュは /home/$USER/.cache/mozilla/firefox/<profile> にあります。これは Chromium などの他のブラウザも同じです。そのため、#ツールを使ってプロファイルを RAM に配置#手動でプロファイルを RAM に配置セクションではキャッシュの再配置や同期は行わずにプロファイルの設定だけをします。詳しくは Profile-sync-daemon#psd のメリットのノートを見て下さい。Anything-sync-daemon を使うことでキャッシュフォルダでも同じように再配置ができます。

キャッシュだけを RAM に再配置

ページがロードされると、またページを表示するときにダウンロードする必要がないようにページのキャッシュが作成されます。メールやニュース、メッセージ、添付ファイルなども同じようにキャッシュされます。Firefox の設定を変更することでキャッシュストレージとして RAM だけを使用するようにすることが可能です。設定ファイルやブックマーク、拡張などは通常通りにドライブに書き込まれます。設定するには:

  • アドレスバーで about:config を開いて下さい。
  • browser.cache.disk.enable を "false" に設定 (行をダブルクリック)。
  • browser.cache.memory.enable が "true" に設定されていることを確認 (デフォルト値)。
  • browser.cache.memory.capacity エントリを追加 (右クリック->新規作成->整数値) して、使用したいメモリの量を KB で設定。もしくは -1 に設定して 自動的に キャッシュのサイズを選択してもらう (エントリを追加しなかった場合も -1 に値は設定されます)。

この設定の欠点は、ブラウザがクラッシュしたり再起動すると現在閲覧しているウェブページの中身が消失してしまうということ、そしてユーザーごとに設定が必要になるということです。

前者の欠点については anything-sync-daemon などの定期的に同期を行うスクリプトを使うことで、定期的にキャッシュをドライブにコピーすることで対処できます。

ツールを使ってプロファイルを RAM に配置

ブラウザプロファイルを tmpfs に再配置すると一般的にブラウザの反応がとても良くなります。他にもドライブの I/O 操作が減らせるというメリットがあり、SSD の場合は特に意味があります。

できるかぎり信頼性があって使いやすい、活発に開発されているスクリプトを使って下さい。AUR から複数のスクリプトをインストールできます:

手動でプロファイルを RAM に配置

はじめに

Firefox のプロファイルを破壊してしまう前に、後で復元できるようにバックアップを作成しておいてください。tar を使ってバックアップを作成できます (xyz.default は適当なファイルに置き換えてください):

$ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/xyz.default

スクリプト

ソース: verot.net の Speed up Firefox with tmpfs

スクリプトは最初に Firefox のプロファイルを新しい場所に移動して、/dev/shm にサブディレクトリを作成して、ソフトリンクを作成し、それからプロファイルの中身をそこに配置します。上と同じように、斜体の部分は適当に置き換えて下さい。絶対に変える必要があるのは xyz.default です。

rsync をインストールして以下のようなスクリプトを ~/bin/firefox-sync に保存してください:

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

Firefox を終了して、スクリプトに実行可能属性を付与してテスト:

$ killall firefox firefox-bin
$ chmod +x ~/bin/firefox-sync
$ ~/bin/firefox-sync

Firefox を再度立ち上げて結果を確認してください。二度目の実行時、スクリプトはプロファイルをディスクにコピーして RAM のプロファイルを保全します。

自動化

プロファイルの同期を忘れると酷いことになるので、同期は自動化するのが合理的でしょう。

systemd

次のスクリプトを ~/.config/systemd/user/firefox-profile@.service として保存します

次を使用します:

systemctl --user daemon-reload
systemctl --user enable firefox-profile@<profile>.service
systemctl --user start firefox-profile@<profile>.service 
 [Unit]
 Description=Firefox profile memory cache
 
 [Install]
 WantedBy=default.target
 
 [Service]
 Type=oneshot
 RemainAfterExit=yes
 ExecStart=/home/matthew/.local/bin/firefox-sync %i
 ExecStop=/home/matthew/.local/bin/firefox-sync %i

cron ジョブ

crontab を使ってユーザーの cron テーブルを操作してください:

$ crontab -e

30分ごとにスクリプトを実行する行を追加:

*/30 * * * * ~/bin/firefox-sync

もしくは2時間ごとにスクリプトを実行する行を追加:

0 */2 * * * ~/bin/firefox-sync

ログイン/ログアウト時に同期

bash を使っている場合、ログイン/ログアウトファイルにスクリプトを追加してください:

$ echo '~/bin/firefox-sync' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
ノート: ~/.bash_login ではなく ~/.bash_profile を使うほうが良いでしょう。両方のファイルが存在して読み込むことができる場合、bash は後者だけを読み込みます。

参照