Я знаю, что обратные вызовы MutationObservers могут быть вызваны через некоторое время после изменения DOM. Но возникает вопрос: каковы сроки этих обратных вызовов? Выполняют ли обратные вызовы очередь событий в браузерах? Если да, то когда они входят в очередь?
Являются ли обратные вызовы:
- вызываемый сразу же после мутации DOM,
- как только функция, которая обрабатывает DOM, заканчивается,
- как только стек вызовов пуст,
- выставляется сразу после мутации DOM,
- завершается, как только функция, управляющая DOM, заканчивается, или
- в другое время?
Например, если выполняется следующий фрагмент кода (setZeroTimeout, указанный здесь):
var target = document.body;
new MutationObserver(function(mutations) {
console.log('MutationObserver');
}).observe(target, {
attributes: true,
childList: true,
characterData: true
});
// Post message
setZeroTimeout(function () { console.log('message event'); });
// DOM mutation
target.setAttribute("data-test", "value");
Должен ли "MutationObserver" печатать перед "сообщением" или после него? Или это определяется реализацией?
Я получаю "MutationObserver" перед "событием сообщения" на Chromium 26, хотя мутация DOM после публикации сообщения. Возможно, это указывает на то, что обратные вызовы MutationObserver не, используя очередь событий.
У меня есть googled для спецификации HTML, спецификации DOM или документов реализации браузера, но я не нашел ничего, связанного с этим поведением.
Любое объяснение или документация о сроках обратных вызовов MutationObservers, пожалуйста?