Кратко

  • Проект DOM4 W3C от декабря 2012 года описал наблюдателей за изменениями и очереди их записей. Рекомендация ноября 2015 года прямо назвала Mutation Observers заменой Mutation Events.
  • Современный DOM позволяет выбрать изменения дочерних узлов, атрибутов и текста, в том числе в поддереве. Браузер ставит записи в очередь и передаёт их при выполнении микрозадачи; автор компонента решает, что обновить.

На странице с расписанием встреч появляется новая карточка, у другой меняется зал, а прошедшая встреча исчезает. Программа, отвечающая за поиск, должна поправить индекс. Вызов посреди каждой отдельной операции покажет ей комнату, где мебель ещё несут. Список изменений, доставленный вместе, позволяет обрабатывать новости как один пакет.

Рабочий проект W3C DOM4 от 6 декабря 2012 года уже определял наблюдателей, очереди записей и операции для прекращения наблюдения или получения ожидающих записей. Браузеру не требуется понимать расписание. Ему нужно определить, какой узел изменился и кто просил сообщать о таком изменении. История публикаций W3C помещает этот проект на пути к Рекомендации.

Рекомендация DOM4 от 19 ноября 2015 года объявила в аннотации: Mutation Observers заменяют Mutation Events. Новый механизм помещает объекты MutationRecord в очереди заинтересованных наблюдателей, а затем ставит составную микрозадачу для уведомления. Несколько правок могут прийти в один обратный вызов списком. Отдельные дверные звонки сменились почтовой доставкой.

Подписчик выбирает тему писем. childList сообщает о добавлении и удалении детей, attributes — об атрибутах, characterData — о текстовых данных. subtree распространяет наблюдение на потомков. Фильтр сужает список атрибутов, а опции прежних значений сохраняют то, что было до правки. Компонент поиска следит за своей частью расписания, оставляя остальную страницу её владельцам.

Запись содержит тип и целевой узел. В зависимости от изменения она может нести добавленные или удалённые узлы, соседей, имя атрибута и прежнее значение. Индексная программа читает пакет и решает, какие встречи пересчитать. Браузер отвечает за очередь и момент доставки. Смысл полученной сводки определяется работой программы и выбранными параметрами подписки.

Действующий DOM Living Standard организации WHATWG сохраняет механизм. Микрозадача уведомляет ожидающих наблюдателей и отдаёт их очереди обратным вызовам. takeRecords() возвращает ожидающие записи и очищает очередь; disconnect() завершает наблюдение. Когда компонент расписания уходит со страницы, его почтовый ящик тоже можно закрыть.

В истории W3C указано, что снимок DOM4 был отозван в 2020 году. Живой стандарт DOM продолжает описывать наблюдателей. Тексты 2012 и 2015 годов показывают историческую смену механизма, действующий текст — нынешний порядок работы. Общее почтовое отделение мало по объёму, зато каждый компонент получает право читать свою корреспонденцию и отвечать за неё.