この話は以前にも話題になっていたのだけど、また同じ事を繰り返しそうなので書いておく。今、時間があまりないので乱文で失礼。間違いの指摘、異論があればよろしくです。
sqlite
firefoxが利用しているsqliteのDBは、データをdeleteしてもDBファイルは小さくならない。このため、firefoxを長期間使用しているとsqliteのファイルがどんどんと肥大化していく。(この点でfirefoxを避難するのは多分的外れかなぁ。内部でsqliteを使用しているアプリケーションを調べるとその実績に驚くはず。)ここで説明するのは、sqliteが既にインストールされている事が前提。
注意点
プロファイルは本来直接さわるものではないはずなので、かならずバックアップを取ること。firefoxが起動していると、いつプロファイル内を書き換えるかわからないので、念のためfirefoxが起動している時には行なわない。
プロファイルの場所
Macの場合、プロファイルは以下の場所にある。
/Users/[ユーザID]/Library/Application Support/Firefox/Profiles
もし、これまでプロファイルを操作した事がない場合はデフォルトのプロファイルしか存在していないはず。
/Users/[ユーザID]/Library/Application Support/Firefox/Profiles/[ランダムな文字列].default
高速化の方法
ターミナルで、デフォルトのプロファイルディレクトリ内に移動。
cd ~/Library/Application Support/Firefox/Profiles/[ランダムな文字列].default
firefoxが使用しているsqliteのファイルを確認。
ls -al|grep sqlite
多分、「places.sqlite」が一番肥大化しているはずなので、「places.sqlite」を例にして説明する。肥大化したsqliteのファイルから使用していない領域をつめるのが「vacuum」という処理。
sqlite3 places.sqlite vacuum
これだけでは高速化は不十分。DBのインデックスを作り直す必要がある。
sqlite3 places.sqlite reindex
この作業をsqliteのファイル全てに行なう。
高速化の方法・改
面倒であれば、次の方法で一度に行なえる。まず、プロファイルフォルダに移動。
cd ~/Library/Application Support/Firefox/Profiles
以下のコマンドを実行。
find . -name "*.sqlite" -exec sqlite3 {} vacuum \;
find . -name "*.sqlite" -exec sqlite3 {} reindex \;
または
find . -name "*.sqlite" | xargs -I % sqlite3 % vacuum
find . -name "*.sqlite" | xargs -I % sqlite3 % reindex
find . -name "*.sqlite" -exec sqlite3 {} reindex \;
または
find . -name "*.sqlite" | xargs -I % sqlite3 % vacuum
find . -name "*.sqlite" | xargs -I % sqlite3 % reindex
これでfirefoxは軽快な動作を(かなり)取り戻す。以前話題になった時には、専用のツールやアドオンが開発されたはずなので、探してみると面白いかも。せっかく過去に失敗して学んで身代わりになってくれた人達がいるのに、同じことを繰り返すのはもったいないよ。こうゆう過去の知見を引っ張ってくるリコメンドエンジン欲しいね。
以前、あまりわかっていない時に書いた記事
2010/05/13 追記
findを二回実行しなくても良いという指摘を2つ頂いた。確かに処理コスト高そう。
id:n2s 重箱の隅ですが、vacuumとreindexで二度実行する必要はないですよ。「sqlite3 places.sqlite "vacuum;reindex"」でもOKです。
アドオンを紹介してくれた方も。同様の処理をするアドオンがいくつかあったはずとは思っていたのですが、文中にもある通り時間がなかったので、調べる暇が取れず割愛していました。
そもそもreindexはいらないんじゃないかという指摘も。
reindexをしているのは、経験的に体感速度があがったと感じたからなんだけど、vacuum時にindexを再構築してそう。
あと、id:teramakoさんが言及されていますが、最新のFirefoxはアイドル時にvacuumを実行してくれているかもという話題。実際にFirefoxにコミットされたかどうかはわかりませんでした。
あと、id:teramakoさんが言及されていますが、最新のFirefoxはアイドル時にvacuumを実行してくれているかもという話題。実際にFirefoxにコミットされたかどうかはわかりませんでした。