要約

  • W3C の2012年 DOM4 草案は変更の観察者と記録キューを記述した。2015年の勧告は Mutation Observers を Mutation Events の後継と明記した。
  • 現行 DOM では子ノード、属性、テキストの変更を選んで観察できる。ブラウザーは記録をキューに入れ、マイクロタスクでまとめて知らせる。受け取った後の更新は部品作者の仕事だ。

会議の一覧を想像しよう。新しい会議を一件追加し、別の会議の部屋番号を直し、終わった会議を消す。検索用の索引を管理する部品は、変更を知ってから自分の表を更新したい。家具を運ぶ途中で一脚ごとに呼び鈴が鳴れば、索引は片付いていない部屋を何度も見に来る。変更をまとめた便りのほうが仕事になる。

2012年12月6日の W3C DOM4 作業草案には、観察者と記録キュー、観察を止める操作や未配達の記録を取り出す操作がある。ブラウザーが会議の意味を知る必要はない。どのノードが変わり、誰がその種類の変更を希望したかを扱えばよい。W3C の DOM4 刊行履歴は、その草案が後の勧告へ続く文書の一つだったことを示す。

2015年11月19日の DOM4 勧告は、Mutation Observers が Mutation Events に代わると冒頭で宣言した。変更のたびに個別のイベントで呼び出す構造から、関心を登録した観察者のキューへ MutationRecord を置く構造へ移った。その後、複合マイクロタスクで観察者を知らせる。一連の編集で生じた複数の記録を、コールバックは同じ便として受け取れる。

受信する手紙は選べる。childList は子ノードの追加と削除、attributes は属性、characterData はテキストの変更に対応する。subtree を指定すれば対象の下のノードも見る。属性名を絞り、変更前の値を求めることもできる。会議一覧の部品は自分の担当区域だけを観察し、ページ全体の出来事に付き合わずに済む。

記録には変更の種類と対象がある。内容に応じて追加・削除されたノード、隣のノード、属性名や旧値も入る。索引を直すプログラムはその束を読んで、どの会議を更新するか決める。ブラウザーは封筒と配達時刻を用意する。受信した知らせの意味を判断するのは部品の作者だ。記録は指定した観察条件に沿って作られる。

現在の WHATWG DOM Living Standardも、観察者への通知をマイクロタスクに入れ、保留中の記録キューをコールバックへ渡す。takeRecords() は残った記録を直接受け取り、キューを空にする。disconnect() は観察を終え、待っている記録も片付ける。一覧をページから外すなら、その郵便受けも閉じられる。

W3C の刊行履歴では DOM4 のスナップショットが2020年に廃止された。観察者の現在の規則は生きた DOM 標準に残る。2012年と2015年の文書は交代の経緯を伝え、現行文書は今日の手順を伝える。共通の郵便路は小さい。何を購読し、届いた変更で何をするかは、各部品が決める。