假設有多餘的內存可用,將 Firefox 的緩存或完整配置文件放入 RAM 中可以帶來顯著的優勢。若選擇部分遷移,不僅其本身會帶來優勢,還比默認配置響應更快。其優勢包括但不限於:
- 減少磁碟讀寫操作;
- 提高響應速度;
- 可在 Firefox 中幾乎即時地執行許多操作(如快速搜索和歷史記錄查詢)。
這可以使用 tmpfs 實現。
由於放入 RAM 中的數據無法在系統關閉後繼續保存,如果需要持久化數據(如遷移配置文件時),需要藉助腳本在系統關閉前將數據同步回磁碟。而僅遷移緩存快速但覆蓋面較小,可以稍微提升用戶體驗,同時在每次重啟時清空 Firefox 緩存。
/home/$USER/.mozilla/firefox/
)不同的位置:/home/$USER/.cache/mozilla/firefox/<profile>
。這與其它瀏覽器(如 Chromium)的處理方式相似。因此,章節 #使用工具將配置文件遷移到 RAM 和 #手動將配置文件遷移到 RAM 不涉及緩存的遷移和同步,而僅限於配置文件的調整。有關更多細節,請參閱 Profile-sync-daemon 的第一條「注意」。Anything-sync-daemon 可以用於實現與選項 2 類似的緩存文件夾操作。僅將緩存遷移到 RAM
使用工具將配置文件遷移到 RAM
將瀏覽器配置文件重新定位到 tmpfs,可全局提升瀏覽器的響應速度,並減少驅動器的 I/O 操作,其中固態硬碟受益最大。
使用一個主動管理腳本可以實現最大程度的可靠性和易用性。在 AUR 中有多個可用的腳本。
Profile-sync-daemon
參見 Profile-sync-daemon 頁面以獲取更多信息。
firefox-sync
firefox-syncAUR 對於僅使用單個配置文件的用戶來說已經足夠,它使用類似於下文 #腳本中的腳本和 systemd 服務。
根據 #開始之前中的建議,確認並備份當前的 Firefox 配置文件。
使用附加配置片段將配置文件作為參數傳遞: -p profile_id.default
。
然後啟動/啟用 firefox-sync.service
用戶單元。
手動將配置文件遷移到 RAM
開始之前
請務必在可能影響 Firefox 配置文件之前將其備份,以便快速恢復。首先,通過訪問 about:profiles
頁面,查看正在使用的配置文件目錄。使用 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
字符串為 Firefox 配置文件目錄。唯一必須更改的值仍然是 xyz.default
。
~/.local/bin/firefox-sync.sh
#!/bin/sh static=static-$1 link=$1 volatile=/dev/shm/firefox-$1-$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 $ ls ~/.mozilla/firefox/ $ ~/.local/bin/firefox-sync.sh xyz.default
再次運行 Firefox 並評估結果。腳本第二次運行時,會將 RAM 配置文件複製回磁碟來保留它。
自動化
鑑於忘記同步配置文件可導致的災難性後果,自動化此過程會是一個合乎邏輯的選擇。
systemd
創建以下腳本:
~/.config/systemd/user/firefox-profile@.service
[Unit] Description=Firefox profile memory cache [Install] WantedBy=default.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=%h/.local/bin/firefox-sync.sh %i ExecStop=%h/.local/bin/firefox-sync.sh %i
然後,運行 daemon-reload 並啟用/啟動 firefox-profile@xyz.default.service
用戶單元。
cron 定時任務
使用 crontab
操作用戶的 cron 表:
$ crontab -e
添加一行每隔 30 分鐘運行腳本:
*/30 * * * * ~/.local/bin/firefox-sync.sh xyz.default
或者添加以下內容,每隔 2 小時運行一次:
0 */2 * * * ~/.local/bin/firefox-sync.sh xyz.default
登錄/註銷時進行同步
$ echo 'bash -c "~/.local/bin/firefox-sync.sh xyz.default > /dev/null &"' | tee -a ~/.bash_logout ~/.bash_login
~/.bash_profile
和 ~/.bash_login
並且兩者都可讀,bash 只會讀取前者,因此可能需要使用 ~/.bash_profile
替代 ~/.bash_login
。對於 zsh,使用 ~/.zlogin
和 ~/.zlogout
代替:
$ echo 'bash -c "~/.local/bin/firefox-sync.sh xyz.default > /dev/null &"' | tee -a ~/.zlog{in,out}