ちょっと調べものをしていたら、Mutation Observer の存在を知った。ミューテーションだよ、ミューテーション。なんかワクワクする響き。完全に X-MEN に影響されてるんだけど。
簡単に言うと、指定の要素(DOM)になんらかの変化があったら、コールバック関数を実行してくれるもの。「なんらかの変更」というのは、アトリビュートの変更(例えば height の値とか)要素の内容とかみたいだ。そして、指定の要素だけでなく、その子要素(subtree)も監視対象に入れられる。
この Mutation Observer の説明を読んで、「これイベントじゃないの?」と思ったけど、イベントではない。むしろ、もともとあった Mutation Event というイベントから置き換えられているのね。なんでそんな置き換えが?と思って、少し掘り下げてみたら、ひとつにはパフォーマンス問題があったようだ。
Mutation Event は数々の問題点を抱えていることが明らかになっています(策定中の DOM3 Events では該当箇所に警告文が記述されているほどです)。例えばパフォーマンスに関わる問題があります。Mutation Event では子ノードだけでなく、すべての子孫ノードからイベントが発送されます。よって、子孫ノード数が多く、ルートノードに近いノードでは、場合にもよりますが膨大な数のイベントを拾ってしまいがちになります。
なるほど、イベントだとバブリングの問題があって、適切に処理しないと「ちょっと変化した」を全て検知してしまって重くなるのかも知れないな。
ちなみに Obverser を辞書で調べると、観測者や監視者というのが出てくる。
「ミューテーションの監視」って、なんかかっこいい響きだな。これから積極的に使おう。