Firefox more faster boot project

先月号のねとらんの「あなたの知らないFirefox」という記事に触発されて、Firefoxの起動時間短縮を目指してこの一ヶ月チューンアップを試行錯誤してきたのでその顛末を記録しておく。


まずやったのは、流行のSQLiteDBの最適化(?)。以下の二つのアドオンを入れた。

僕の環境では高速化された実感は無かった。


次にやったのは、アドオンに含まれる不要な言語ファイルを削除するFireboot。

これは効いた。アドオンのサイズが半分くらいになり、起動速度も10秒以上かかっていたのが数秒になった。
アドオンをたくさん入れている人はやったほうがいいよ。(ただし自己責任で)


さて、起動時間は短縮されたけど、まだ数秒かかる。


次にやったのは、Windowsの起動時に一部を常駐させてしまおうというFirefox Preloader。

Windowsの起動時間の短縮はもうあきらめているので、数秒増えたところで気にならない。
ところがなぜか1回目の起動が2,3秒かかる。2回目以降は1秒とかからない。
そう、常駐させているのは一部なのだ。どうもアドオンはロードされていないらしい。
ソースが公開されていたのでちょっと見てみた。

firefox.exe -chrome "chrome://browser/content/web-panels.xul"

こんなオプションで起動していた。
どうもベースになるコンポーネントだけをロードしているみたいだ。
バイナリでパッチをあてて-chrome以下のオプションを外してみた。
当然すべてロードされるがSW_HIDEが効いていない。ウィンドウが最小化されないのだ。


そう、Firefoxはショートカットを作成して、そのプロパティで「実行時の大きさ」を「最小化」にしても最小化されない。
これを回避するための起動オプションなのだろうか。


まあ、それはともかく1回目の起動だけちょっと時間がかかるのは、せっかくWindows起動時にロードしている意味がない。


なにか他に対策はないものだろうか。
検索していてMinimizeToTrayとMinimizeToTrayEnhancerというアドオンを使うと最小化して起動することができるらしいことが判った。
ところがどちらもFirefox3以降に対応していない。
もう少し探してみると、MinimizeToTray for FF3.5とMinimizeToTray Plusが見つかった。

MinimizeToTray自体は最小化した際にタスクバーではなくトレイにアイコンを表示するようにするもので、MinimizeToTrayEnhancerが起動時の最小化機能を付加するもので、MinimizeToTray PlusはEnhancerの機能を取り込み、ひとつのアドオンで機能する。


MinimizeToTray Plusをいれて「Start application with windows」にチェックをいれる。Windowsを再起動。
Windows起動時にFirefoxのアイコンがタスクトレイに表示された。おおっ。
アイコンをクリック!
残念ながらやはり1回目の起動には時間がかかるようだ。
ちなみにこちらは-turboというオプションで起動しているらしい。
しかもアイコンがタスクトレイに残ったままだ。最小化するとアイコンが増えた。気持ち悪い。
でも未使用時にアイコン化してトレイに入れる、というのはいいかも。Plusは気持ち悪いのでfor FF3.5をいれた。
オプションは「トレイに最小化します」のみチェック。これだとクローズ時だけアイコン化され、最小化時はタスクバーに入る。そしてアイコンのシングルクリックで復帰する。
当然復帰時にはアイコンは消えるよ。(アイコンが消えないのは-turboオプションで起動した時だけのようだ)


さてさて完全ロードで起動時に最小化する方法はないものか。更に検索。
ありました。AutoHotkeyというマクロエンジンを使ってFirefoxのウィンドウがアクティブになるのを待って最小化のコマンドをポストするマクロ。
落としたところを忘れてしまったのでマクロだけ下記に。AutoHotkeyについてはこちらが詳しい。

Run,"C:\Program Files\Mozilla Firefox\firefox.exe"
WinWait, ahk_class MozillaUIWindowClass
PostMessage, 0x112, 0xF020, , , ahk_class MozillaUIWindowClass

PostMessageの行の0x112はWM_SYSCOMMAND、0xF020はSC_MINIMIZE。
僕の場合、起動時にはアイコン化させたいのでSC_MINIMIZEではなくSC_CLOSEの0xF060に変更して、落としたファイルに同梱されていたコンバータでマクロをEXEファイルにコンバートした。で、これをスタートアップにいれて再起動。

おお!起動時にアイコン化された。クリックで瞬時にウィンドウが開かれる。(当然ウィンドウズ起動中は瞬時というわけにはいかないが)

とりあえず、これでプロジェクト完了。
まぁ本当の起動時間短縮はFirefox.nextに期待してるよん。