この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2013年8月)

2013年8月31日

Bug-org 906281 each nsEventStateManager should not register as a pref observer
初回投稿日時: 2013年08月31日11時59分48秒
カテゴリ: Mozilla Core Mozilla26 バグ修正
SNS: (list)

nsEventStateManagerが、グローバル変数に設定値をキャッシュしているにもかかわらず、何故か、全てのインスタンスが設定変更を監視していて、設定変更の際に、全てのインスタンスが同じ変数の値を上書きし続けるという、変なことになっていました。これにより、nsEventStateManagerのインスタンスが破棄される際に、設定変更監視を行っているオブジェクトの登録解除を行うコストがそこそこ高いらしく、タブを100から200程度ほど、一度に閉じると、相当なものになっていたようです。

今回の修正で、原則的には、Preferences::Add*VarCache()を使用するようにし、変更タイミングが必要なもののみ、staticなクラス(nsEventStateManager::Prefs)が監視するように変更しました。

この変更で、普段の利用でパフォーマンスの違いを体感できることはないと思いますが、大量に<iframe>を活用しているようなサイトだと、ms単位ではレスポンスが改善されていると思います。

関連するかもしれないエントリ

bug-org 906281を含むエントリ