2009年4月29日 星期三

Firefox 3 日漸肥大的收藏庫減肥法

本文已更新,請看:Bilog II: Firefox 3 日漸肥大的收藏庫減肥法:最新版!

只要用了 Firefox 3 幾個月,你一定會感覺到反應明顯遲鈍了起來,尤其是在開啟、關閉、跟檢視歷史紀錄等跟「收藏庫」有關的功能上。今天我們要透過簡單的幾個指令,幫 Firefox 3 日漸肥大的收藏庫減肥!

Firefox 3 會把你所有上過的網站、輸入過的網址通通一五一十的紀錄在 Profile 目錄中的 places.sqlite 資料庫檔案裡。

這個檔案的位置在個人 profiles 的目錄中,目錄名稱是「亂碼.default」。
XP 在 C:\Documents and Settings\\Application Data\Mozilla\Firefox\Profiles\
Vista 放在 C:\Users\\AppData\Roaming\Mozilla\Firefox\Profiles\
Linux 在 ~/.mozilla/firefox/
Mac 在 家目錄\資源庫\Application Support\Firefox\Profiles\

清理Firefox 3肥大的places.sqlite 01

看看我的 places.sqlite,已經肥大到 414MB 了,而這不過是從去年 12 月底開始使用至今呢!最簡單的清理法就是直接把 places.sqlite 刪除,開啟 Firefox 時會自動重建這個檔案,但是瀏覽紀錄就全沒了。

清理Firefox 3肥大的places.sqlite 02

從收藏庫查看,可以發現已經記錄了 4 萬筆網站。Firefox 預設最多會保留四萬個網站、90 ~ 180 天的瀏覽紀錄,雖然可以調整 about:config 的 browser.history_expire_sites、browser.history_expire_days、browser.history_expire_days_min 等三個參數,控制相關設定,但是降低了 expire_days 或降低 expire_sites 的上限,又會使 Awesome Bar 的威力下降。

因此,我要使用簡單的 sql 命令,清除 places.sqlite 檔案中無用的紀錄,並保留實用的部份。Windows 的使用者請先前往 SQLite Download Page,下載 Precompiled Binaries For Windows 中的 sqlite-3_6_13.zip,解壓縮至目錄中,而 Mac OS X 已經內建了 sqlite3。

請事先備份你的 places.sqlite 檔案,並小心服用。進行前請先把 Firefox 關閉,如果沒關,我也不知道會發生什麼事情!

以下指令請在 Firefox 3 的 Profile 目錄下,以命令列逐行執行。

sqlite3 places.sqlite "DELETE FROM moz_historyvisits WHERE place_id IN (SELECT id FROM moz_places WHERE visit_count <=2 );"
sqlite3 places.sqlite "DELETE FROM moz_places WHERE (visit_count <=2 AND hidden <> 1 AND id NOT IN (SELECT place_id FROM moz_annos UNION SELECT fk FROM moz_bookmarks));"
sqlite3 places.sqlite "DELETE FROM moz_inputhistory WHERE place_id NOT IN (SELECT id FROM moz_places);"
sqlite3 places.sqlite "DELETE FROM moz_favicons WHERE id NOT IN (SELECT favicon_id FROM moz_places);"

上述指令的主要意義是,將 places.sqlite 內瀏覽次數小於 2 次的瀏覽紀錄刪除,保留常去(瀏覽 3 次以上)的網站,使 Awesome Bar 的威力不至於打折。

此時需要先打開 Firefox,再關閉 Firefox。確認完全關閉後再繼續進行下一步。

sqlite3 places.sqlite "VACUUM;"

(2009/5/5 更新:請看本文的 續篇,提供了更新的刪除指令)

完成之後,你的收藏庫就減肥完成啦。經過減肥之後,我的收藏庫居然從 414MB 降到只剩 40.2MB!

清理Firefox 3肥大的places.sqlite 03

再打開收藏庫看看,只剩下 2643 個項目。刪去了佔 9 成的那些不到兩次的瀏覽紀錄,成功的使 Firefox 3 回復該有的速度。

清理Firefox 3肥大的places.sqlite 04

感謝 @yllan@softcup分享,這是今天研究一個下午的成果。

補充:很多朋友在問,這樣作跟使用 Firefox 內建的「清除隱私資料…」清除瀏覽紀錄有什麼不同?基本上的差別就是,清除隱私資料,會把所有的瀏覽紀錄清光光,我卻只想清除無用的那些紀錄,保留有用的部份。此外,清除隱私資料→清除瀏覽紀錄後,如果沒有做 sqlite vacuum 空間是不會釋出的(我也不知道會不會定期自動釋放)。

places.sqlite大測試

經過小小的測試(見上圖),上面的四個 places.sqlite 分別是以下操作所得:(原檔案大小是 372.2 MB)
places.sqlite 1 Firefox 3 開啟→關閉→VACUUM 366.3MB
places.sqlite 2 Firefox 3 開啟→清除隱私資料→VACUUM 428KB
places.sqlite 3 Firefox 3.5b4 開啟→關閉→VACUUM 366.2MB
places.sqlite 4 Firefox 3.5b4 開啟→關閉→清除隱私資料→VACUUM 168kb
看來 Firefox 3.5 beta 4 對於 places.sqlite 的處理,似乎有比較乾淨一點。

除了瀏覽歷史外,places.sqlite 還存有各網站的 favicon 快取,Google Toolbar 或 Fastdial 之類擴充套件的資料等很多紀錄,所以沒辦法完全不要這個檔案。但是可以調整以下參數來控制 Firefox 3 對瀏覽歷史的保留動作。

about:config
browser.history_expire_sites 瀏覽歷史中保留的網站數目,預設是 40000 個
browser.history_expire_days 瀏覽歷史的最長保留天數,預設是 180 天
browser.history_expire_days_min 瀏覽歷史的最短保留天數,預設是 90 天

然後把 places.sqlite 刪掉(記得先備份)讓 Firefox 3 自動重建資料庫。

10 意見:

匿名 提到...

有可能把這些 SQL 指令做成擴充套件嗎?

irvin 提到...

我剛想到一個問題。在擴充套件內要怎麼讓 Firefox 關閉作 VACUUM 啊,好像不行喔……

匿名 提到...

我用了這個附加元件試圖開啟 places.sqlite:

https://addons.mozilla.org/zh-TW/firefox/addon/5817

但是出現檔案無法開啟的錯誤。看樣子 Places 正在用的 db 其他擴充套件不能碰。

不知道有沒有什麼 Firefox 正在啟動 or 結束的時機可以執行你那些 SQL 指令...

irvin 提到...

我的經驗是可以,我從頭到尾都是在SQLite Manager上測試places.sqlite的說,最後才改用sqlite3來做。你要不要測測看先複製檔案再開看看?另外ybite有 講到 Firefox會自動VACUUM,如此做瘦身套件的最大問題就解決啦。

cyh 提到...

你好,我照著你的步驟執行,結束後從871.4MB降到838MB左右,因此想請教是否有哪邊執行錯誤。

我在mac中的library\application suppor\firefox\路徑下找到profiles資料夾,可是profiles還有一個名為2pn1e4p5.default2的資料夾,而places.sqlite就位在此資料夾中,所以想請問是否該使用terminal進到此資料夾下執行指令或是仍然在profiles資料夾下執行即可?

cyh 提到...

再次嘗試,已經成功,
places.sqlite成功減肥至72.3MB,謝謝。

最後還想請問,文末提到可以將把 places.sqlite 刪掉(記得先備份)讓 Firefox 3 自動重建資料庫。
可是之前不是講到沒辦法完全不要這個檔案。這樣刪除後,之前的紀錄不都消失了?或是刪除後仍然會保留網頁紀錄?

還麻煩請解釋此段意思,謝謝。

irvin 提到...

cyh: 那一段是補充說明給想要把整個places.sqlite砍掉的朋友看的,正常瘦身不用進行~

cyh 提到...

了解,謝謝。
減肥後真的恢復當初的速度。
相當感謝分享資訊!!

匿名 提到...

http://farm4.static.flickr.com/3333/3485249967_c85903d21c.jpg

請問一下這個是在FX的那裡選項或是套件

33囧 提到...

安安
請問有沒有辦法把裡面的網址複製出來存到別的文件裡呢??
或是請問firefox可不可以用指令把網頁存成html呢??