Firefoxの動作を軽快にする方法

Firefoxはブックマークや履歴、クッキーなどをSQLiteと呼ばれるデータベースに保存しブラウザ内部でSQLコマンドを実行する事によって簡単に情報にアクセスできるようになっています。しかしFirefoxSQLiteはデータを削除しても領域が解放されず徐々に肥大化してFirefoxの動作に影響を与えます。
SQLiteのVACUUM(データベースの不要領域の回収)、REINDEX(インデックスを再作成)をすることによってこの問題を解決することが出来ますがこれは自動で実行されない(2010年度中にリリースされる予定のFirefox4で解決されるという話もありますが)のでこの作業を手動で行う必要があります。

SQLiteを最適化する方法はいくつかありますので紹介します。

  • 拡張機能をインストールせずに最適化

    アドオンを増やしたくない!という方にお勧めの方法です

    まず[ツール]-[エラーコンソール]からエラーコンソールを開きます





    そして次のコードを入力し、エンターキーを押します

    Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase). DBConnection.executeSimpleSQL("VACUUM");


    実行するとSQLiteのバキュームが実行されます、完了しても何も結果が返って来ないので実行されていないように見えるかもしれませんがHDDのアクセスランプ等で確認出来ます、肥大化しているサイズが大きいと実行している間Firefoxがフリーズしているように見えるかもしれません。

  • 拡張機能で最適化する

    毎回コマンドを入力するのが面倒だと感じた場合拡張機能を使って最適化するのがよいでしょう。

    どちらも機能的には同じですが後者は英語のみなので前者の拡張をお勧めします(作者が日本人なので日本語でのサポートを受けられます)

    SQLite Optimizerの使い方

    SQLite Optimizerをインストールしてもアイコンやメニューは追加されません。

    アドオンからSQLite Optimizerの項目を選択し[設定]を選ぶと最適化することが出来ます。



    今すぐREINDEXを実行するをクリックするとVACUUMを行った後REINDEXされ結果のダイアログが表示されます。

SQLiteの最適化をするとする前と比べて格段に動作が速くなります!、起動はもちろんのことページの表示も速くなりブックマークの操作も早くなります。
Firefoxは重いもの」、と思っている人もこれを知れば考えが変わる・・かも

マザーボードとCPUを交換した!

旧構成
 CPU Pentium 4 541(3.2GHz x 1 , シングルコア)
 M/B 945G-M3 (MicroATX)

新構成
 CPU Pentium Dual-Core E6300 (2.8GHz x 2 , デュアルコア) 7800円
 GA-G31M-ES2L (MicroATX) 5200円

メモリとかHDDとかはそのままだけどWindowsXPの再インストールしないといけないのは厄介だなあ。マザーボード安すぎ、こんなに高性能なのにこの値段でいいの?と思うほど安い、相性問題も少なくてかなりの数のCPUに対応してるのにこの値段はうれしいなあ。

新構成でベンチマーク

構成の詳細
CPU Pentium Dual-Core E6300 (2.8GHz x 2 , デュアルコア)
M/B GA-G31M-ES2L
MEM DDR2-800 1GB x 2
VGA GeForce 9600 GT(512MB)
HDD WDC WD6400AAKS(7200 rpm , Serial ATA300 , 16MB)
画面解像度は 1280 x 1024

追記
CPU-Z、低負荷の時は省電力機能が働いているためCoreSpeedが1600MHzまで落ちている

GPU-Z

JavaScriptで履歴を盗まれるセキュリティホール

タイトルで”履歴を盗まれる”と書いてあるが仕組み的にはそんなに大袈裟なものではなく
単にスタイル情報を取得しているだけ
要するにリンクのスタイル情報(たとえば色とか)を見て訪問済みのスタイルが設定されているかを判断する

たとえばこのコード
< a href = "www.google.co.jp" ></a>
<script>

e = document.getElementsByTagName("a")[0];
x = e.currentStyle || document.defaultView.getComputedStyle(e, '');
if (x.color == "rgb(128, 0, 128)" || x.color == "#800080") {
alert("true");
}
</script>
このコードは一番最初のa要素をdefaultView(currentStyle)でcolorを参照して色が#800080ならアラートを出すプログラムだ。
スタイルシートで訪問済みの色を#800080にして未訪問をそれ以外に設定すると履歴が取れてしまう

このような簡単な記述でプライバシーを覗けてしまうのはどうかと思う。
ユーザーに出来る対策としては
・ブラウザに一切の履歴を保存させないようにする
JavaScriptを無効にする
程度しか方法が無い。
根本的にはリンク要素のスタイル情報を参照出来ないように仕様を変えるしかないだろう。

楽天がパソコンから検索履歴を収集

楽天がパソコンから検索履歴を収集 個人情報を無断利用? (1/2ページ) - MSN産経ニュース
楽天が履歴を集めて広告ビジネス(ad4U)にしてるのは知ってたけどやっぱり問題になり始めたね。
ad4Uはサービス開始前から話題になってたけど1年経ってようやく危険性が認知され始めたなという感じ。
このことに関しては高木さんが色々調べて行動してるので参考にしてほしい
高木浩光@自宅の日記 - 楽天CERTに対するブラウザの脆弱性修正を阻害しない意思確認

ノードのinnerHTMLが書き換えられたらonchangeを発生させる

function onDOMchange(e)
{
try
{
if ( (typeof (e) == "object") && (e != null) )
{
if (typeof (e.DOMloging) == "undefined") {
e.DOMloging = e.innerHTML;
}
setTimeout(function ()
{
onDOMchange(e);
}, 10);
if (e.DOMloging != e.innerHTML) {
e.DOMloging = e.innerHTML;
e.onchange();
}
}
}
catch (e) { }
};
onDOMchange(document.getElementsByTagName("body")[0])みたいな感じで呼び出すと10ms間隔でinnerHTMLを監視して変更があったらonchangeを発行するよ

たとえばこんな感じで使う

$('id').onchange = function ()
{
alert("onchange!");
}
onDOMchange($('id'));
$('id')のinnerHTMLが変更されるとonchange!とダイアログが出てくる。