- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

Firefox3を高速化するための方法

# 筆者はFirefox4に移行中ですのでそのうちFirefox4にまとめたいと思います

Firefox3は起動が遅かったり、妙に重かったり、再起動に5分は掛かったり、放置しておいたらメモリが500〜900MBくらいくってたり、その辺を解消しようと言う話

Firefoxは壮絶にメモリーリークしている気がします。
また、数秒ごとに固まる現象が起きており、多分メモリーリークのせいでは?(GCが働くとか)などと思ったりしています。

ブラウジングの高速化よりは、Firefox自体の高速化(軽量化)の話)。
とはいえ、このページでは両方ともまとめて扱っています。

指針としては、メモリー喰いすぎず、全体的に軽く、ブラウジングもそこそこ速くなる、というバランス加減を目指しています。

こちらで、試行錯誤の記録を残しています→[チューニング] - 技術文化遺産復興日記

まだ解決できていません! 大体解決しました(え?してない?)
原因はセッション復元機能の定期的に保存する機能のせいだったようです。解決策ありかも!(現在、検証中) というわけでもないようだ
→結局、解決しなかった (´・ω・`)
ver 3.6にしたら大分緩和されました!
BarTabアドオンが救世主になるかも…
→メインブラウザをChromeに乗り換えました
→Chromeも重い!!!!!!!
→ブラウザの使い方が悪いようなので自分という人間を管理できるように試みています
(具体的には最低限の拡張を使う、タブを立ち上げすぎないという方向性)

とりあえず、手っ取り早く筆者の行っている方法を知りたい場合は「現在の最適解まとめ」を御覧下さい

現状分析 Edit

以下Firefoxをしばらく起動しているときの症状

  • Firefox3.6 on Windows Vista SP1(or XP SP3)
  • 使っているといつのまにかメモリーが900MBくらい占有している アドオンを減らすことで700MBくらいに減らすことに成功
  • 再起動に5分以上かかる 4分くらいに
    →メモリを新しいのに変えたら2分くらいなった( ´д`)
  • 一定時間ごと(数秒〜数十秒ごと)に一瞬操作不能(フリーズしたような)状態に陥る。セッション保存機能の可能性高し!
    操作不能時はFirefoxのCPU占有率がMAXになる。(1コアで100%近く)
    メモリーの占有量が多くなるにつれ顕著なよう。
    そのためYoutubeやニコニコ動画もカクカクでまともに見れない。
    Sleipnir(IEコンポーネントブラウザ)では起きない。
    また、一瞬固まるためブログを書いたり等のテキスト編集などがかなりキツイ
  • アドオン(プラグイン)は結構一杯入れている。減らしました。43個→17個
  • 起動直後は動画などそんなに瞬間的に固まらない感じ。
  • プロファイルを新しく作り直すとなんかサクサクな気がする
  • アドオンを検証した結果、greasemonkeyがやたら重くなる原因、メモリ食いなことが判明
  • 3.6では固まる時間がかなり短くなった(気がする)

参考:

上記の方と多分同じような症状

その他メニュー Edit

現在の最適解まとめ Edit

Firefoxの高速化(というか重くなるのを防ぐ)のために現在筆者の行っている最適解について(上から効果がありそうな順)

  • 昨今の代表的なコンピューターのボトルネックを解消する
    • ディスクを速いものに変える(システムをSSDに変え、Firefoxのプログラム、プロファイルともにSSDのディスク上に移す)
    • メモリを増設する(2011年現在、用途にもよるがメモリー2〜4GBではつらい時代だと思う)
  • 妥協してChromeに乗り換える
    「入れているFirefoxアドオンが少ないけど重い」という人ほど速いと感じるのでは?
    Firefoxでlifechangingなアドオン、数多くのアドオンにかなり依存している人はChromeに移る利点はないと思う
    • Chromeでも拡張を入れすぎるとFirefoxよりもひどくなるので拡張は最小限にする(ページごとのプロセス起動がいかせなくなる)
      →別ページ作る
  • アドオンやGreasemonkeyを「どうしてもないと死んでしまう」もののみにする
    (Chromeでも一緒)
  • 用途に合わせてプロファイルを使い回す
    ふだんのインターネット用にウェブ開発用のアドオン(firebugや関連アドオンなど)をいれていませんか?
    →ウェブ開発用プロファイルを作って、メインの環境からはウェブ開発用のアドオンは外しておく
  • もはや焼け石に水

こんな感じです。極端な話これ以外のこのページに書いてあることはそんなに意味がない気がします(ただし、greasemonkeyやAutoPagerizeは便利すぎるのではずせませんでした)

筆者は最近はChromeを使ってますが、Firefox4が出た機会にまたもどろうと考えています

行ってみた対策 Edit

user.jsに設定する項目 Edit

about:configで直接設定してもいいですが、
user.jsに書いておくとどこを変更したか、とか見やすくていいです。

user.jsに書いた後でFirefoxを起動すると、本来の設定に上書き設定されます。

ページの履歴を減らす Edit

デフォルトでは、最低90日、最高180日でかなり、
places.sqliteが肥大化する。
これを防止する設定。

再起動等がメッチャ早くなった。かなり効果ある気がします
気のせいでした、ダメポ…

「ツール」→「オプション」→「プライバシー」の「履歴」の「表示したページの履歴を少なくともxx日分は残す」の設定は、
「少なくとも」が曲者で、この設定だけでは履歴の保存日数が減らないらしい。よって、user.jsで詳細設定する。

// 表示したページの履歴を残す日数(7日間)
user_pref("browser.history_expire_days", 7);
user_pref("browser.history_expire_days_min", 7);

ちなみに、places.sqliteをSQLiteのDBを弄るツールにてVACUUMしてDBを小さくしておく必要アリ。
VACUUMが何故必要かというと、Firefoxで使っているデータベースエンジンのSQLiteは削除したデータを、実際には削除しないで放置するので自分で実際の削除をしないといけないのです。
(Firefoxがサポートしてそれくらい定期的に実行しろよ、という気はする)

Firefoxで使われるDBを調整する Edit

(上とかぶっていますが)Firefoxで使われるDBに間して

  • DBをVACUUMする
  • DBをreindexする

を行うと「起動が速くなる」などの報告がブログなどで散見されます。

reindexに関しては、SQLite Optimizer という実験的アドオンにて、終了時に自動的に行うことができます。

しかし残念ながら、今のところ、このページで悩んでいる問題について特に目立った効果はないようです。

参考:

アドオン(拡張)をなるべくはずす Edit

とりあえず、拡張を外しまくってみているのですが、ダメポ…。
それでも、メモリの増加速度は大分減りました。

ただし、一瞬止まるという現象は解決してません。

経過:Firefoxが重い…のをなんとしたいメモ - 技術文化遺産復興日記

プロファイルを作り直す Edit

最終手段にしたいです…。

参考:

そもそもメモリーリークしているんじゃないのか?という話 Edit

最終的には、ビルド環境を作ってソースを追う羽目になるのでやりたくない、というのが正直な話…。

../メモリーリーク 独立してページ作りました。

その他噂系参考: [#ub917e55]

定期的に再起動する Edit

定期的に再起動する!!

今のところ多分ベストな解決方法→まあまあベターな感じ。

↓例えば以下のWindows VistaガジェットでFirefoxのメモリー使用量を監視します。
窓の杜 - 【REVIEW】プロセスのCPU使用率・メモリ使用量トップ5をサイドバーに表示「Top Five」

そして、メモリー消費が400MB〜500MBくらいになったら、Firefoxお再起動します。これでOK。
→しばらく使ってみましたが、根本的に解決してない気がします。
それでも定期的な再起動はかなり有効。動画が見たくなったら再起動してます。

↓再起動に便利なプラグイン(Ctrl+Alt+R一発再起動できます)
QuickRestart :: Firefox Add-ons

関連:

セッション復元のインターバルを長くする方法 Edit

セッション復元のインターバルを長くする!!

セッション復元のための保存のインターバルを長くすること。具体的な方法としては、アドレスバーで「about:config」と入力しEnterキーを押すと、フィルターボックスが表示されますので、さらにフィルターボックスに「browser.sessionstore.interval」と入力しましょう。すると「10000("10秒に保存する"の意)」が表示されるはず。この数値を5分ごとの保存とするならば「300000」、2分なら「120000」など、任意の数字に変更すればOK。
via: Firefoxでの動画サイトのイライラを解消する方法 : ライフハッカー[日本版] 仕事も生活も上手くこなすライフハック情報満載のブログ・メディア

これは疑ったことがありませんでした。

ということで、about:configを使うのもいいですが、記録が残るようにuser.jsにここでは書いてみましょう。

プロファイルディレクトリのuser.jsファイルを開きます。なかったら新規作成します。
そこに以下のように記述して、Firefoxを再起動します。

// セッション復元の保存のインターバルを設定(動画の定期フリーズ防止)
// 5分に設定(2分なら 120000)
user_pref("browser.sessionstore.interval", 300000); 

TabMixPlusの独自セッションマネージャ使う場合はどうしたらいいんだろ(´・ω・`)
→「内臓のセッション復元機能を使用する」にチェックする。
(独自セッションをあきらめる)

→結局、直らなかった orz

けっきょく原因なんなんだよ!(´;ω;`)

関連:

greasemonkey Edit

アドオンをいくつもオンオフして検証していった結果、
汎用スクリプトなアドオンgreasemonkeyがある程度固まる原因ではないか?、ということがわかってきました。

greasemonkeyに入れているスクリプトを減らして様子見中です。
とくに全ページに適用する類は注意。

(検証中…)

greasemonkeyアドオンを無効化したら固まることがかなり少なくなりました。
また、ブラウザの読み込みレンダリング動作自体が非常に軽くなりました(当然と言えば当然)。
→greasemonkeyは便利ですが、泣く泣くはずし中…。
Firefox 3.5でJavaScriptの動作はかなり軽くなったのですが、それでもやっぱり重いという。
→外すとネットライフに支障がでるので結局Greasemonkey入れて使ってます(´・ω・`)

autopagerize使っていると重くなる? Edit

autopagerizeが原因だったりする気もしないでもない…

上でgreasemonkeyアドオンを外しているのですが、
autopagerizeだけはどうしても外せないと拡張版をインストールして使ってみているのですが、
どうもautopagerizeで自動ページ送りしまくっていると、すぐにブラウザが固まるようになることに気づきました。
(主にTumblrのdashboardの流し見)

AutoPagerアドオンだとそんな固まる感じがしないでもない?(ただautopagerizeは動作自体がかるく自動ページ送りがメッチャ速いのでたくさんページ送りしてしまっているせいなのかも)

(検証中?)

Firefox 3.6では固まるのは大分緩和されている(気がする) Edit

Firefox 3.6ではニコニコ動画、Youtube等で数秒ごとに固まることは固まるけど、大分ガマンできるかな、というくらいになってきた(気がする)

以下改善点の引用。

Firefox 3.6改善: GCポーズ時間の短縮
JavaScriptではガベージコレクタが定期的に実行され利用されていないメモリを開放している。GC実行中はすべてのJavaScriptが停止されるため、JavaScriptでアニメーションを実施している場合には一瞬画面が止まるような描画が実施されてしまう。Firefox 3.6では次のふたつの方法でGCポーズ時間の短縮を実現している。

freeコールで多大な時間が使われていることがわかったため、JavaScriptスレッドからは利用しなくなったメモリチャンクを待ち行列に追加する処理のみを実施するようにし、開放については他のスレッドからアイドル時間中や、ほかのプロセッサから実施するように変更。特にマルチコアシステムではこの効果の恩恵を受けやすい
従来の実装ではGCとJITがお互いに別々に動いていた。Firefox 3.6ではGCとJITを連動して動作させることで、GCがキャッシュやネイティブコードをクリアしてしまわないように変更した
via: Firefox 3.6のJavaScript高速化技術まとめ | エンタープライズ | マイコミジャーナル

BarTabアドオンが救世主になるか? Edit

BarTabというアドオンがこの問題に際してなかなかに素晴らしい解決策になりそうな予感がしてます。

簡単に言うなら起動時にページを読み込まないで、タブをクリックしたときに遅延ロードをするアドオンです。つまり、常にタブを数十個開いていて、起動時に前回のセッションを復元するような設定している人にはかなりよさげなアドオンではないかと。

このアドオンで解決される(と思われる)こと

  • Firefoxの再起動の高速化
    実質ページを読み込まないので起動がめちゃめちゃ早い!!
  • 見ないページをロードしないので負荷がかなり軽減される
    原理上Flash等たくさんの重いページをたくさん開いていてもFirefoxは軽いまま。
    何もしなくても常にクアッドコアCPUの15〜20%くらいを占有する現象がなくなった(気がします)
  • メモリ消費量の軽減
    同上

欠点と思われること

  • タブをクリックしてからページを読みこむのでちょっとストレスがたまるかも
  • セッションはどうなるのだろうか?(ロードせずに放置しておくとセッションがきれて再ログイン必要になる?Tomblooとの併用が気になる点)

アップデートでロードしてないタブのfaviconも表示されるようになりました!また、読んでいないタブを自動的にアンロードする(?)オプションもあり。
除外指定するページを指定できるようにならないかなー(´・ω・`)

(現在このアドオンを検証中です)

動画は他のブラウザ(Chromeなど)を使う Edit

別のブラウザで見ればいいのではないか?という方法

Chromeや他のブラウザに現在見ているページのURLを渡すアドオンとして、Launchy があります。

動画がFirefoxでカクカクする問題はこれで解決できます。(解決になっているかは不明だけどとにかく手っ取り早い方法!!!!!)

動画再生だけなら、Chromeの他にOpenJaneと連携するための外部プレイヤーとして使われているStreamingPlayer.htaも使えます。(ただし、Launchyの設定ファイルへの追加が必要なのと、大概はプレイヤー部分だけの表示になります)

お前の体感で「数秒固まる」とか言われてもしらないんだよ! Edit

いいたいことはわかりますが、再現させて定量的に測る方法がわかんないんです…。

ページの表示はベンチマークっぽいものが取れるようです。

ページの表示の他に、

  • アドオンやgreasemonkeyごとのメモリ消費やCPU占有率
  • ブラウザ全体のもっさり(UI)
  • 定期的な一時停止

が測定できれば…

Google Chrome内蔵タスクマネージャ(Ctrl+ESC)のようにアドオンやページごとのメモリ消費やCPU占有率が表示できれば解決しやすそう
Google Chromeは構造上アドオンやuserscriptを別プロセスにわけているので測定しやすいみたいです。
(かなり意外なアドオンがメモリを食っていることがわかったり。アドオンとアドオンの組み合わせや、アドオンとあるページ固有のメモリ消費や大きな負荷は試行錯誤が要ります)

参考リンク Edit


Show recent 10 comments. Go to the comment page.

Firefox 3.6.4リリース、プラグインプロセスを分離 -- TOBY 2010-08-26 (Thu) 00:42:01

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2011-05-14 Sat 09:52:55 JST (1287d)