javascript — срабатывает ли обратный вызов MutationOberserver в том же кадре анимации, в котором были изменены наблюдаемые элементы?

Срабатывает ли обратный вызов MutationOberserver в том же кадре анимации, в котором были изменены наблюдаемые элементы?

Предположим, я внес изменения в элемент внутри фрейма, созданного с помощью window.requestAnimationFrame и что измененный элемент отслеживается MutationObserver . Срабатывает ли обработчик изменений MutationOberserver в одном кадре и до того, как браузер выполняет рендеринг, следующий за кадром?

(Я могу предположить, что это может быть не так с некоторыми полифиллами. Мне любопытно узнать, есть ли гарантия, что это так в нативных реализациях.)

РЕДАКТИРОВАТЬ: Возможно, лучший вопрос заключается в том, гарантируют ли микрозадачи выполнение в том же кадре анимации, где они были в очереди? , который может косвенно ответить на этот вопрос, а также объяснить поведение Promise или поведение чего-либо еще, использующего микротрассы.


РЕДАКТИРОВАТЬ 19 июля 17 года. Причина, по которой я хочу знать об этом, заключается в том, что я хочу точно знать, как модификация DOM и выполнение пользовательского рендеринга (например, WebGL) на основе мутаций DOM могут синхронизироваться с краской браузера.

Например, предположим, что пользователь моих пользовательских элементов использует requestAnimationFrame , а затем изменяет некоторые атрибуты моих пользовательских элементов, предназначенных для webgl. Я хотел бы быть в состоянии гарантировать, что я смогу отреагировать на эти изменения до того, как краска браузера, которая последует за кадром анимации, выполнит мой рендеринг webgl, чего ожидает пользователь, и отобразит его в следующем кадре, а не любой последующий кадр.

Основываясь на некоторой теории, я знаю, что микрозадачи Promise запускаются после текущей макрозадачи, и на основании проведенного мною тестирования я убедился, что обработчики Promise, определенные в кадре анимации, будут срабатывать до следующей рисования браузера.

Распространяя это на наблюдателей мутаций, я полагаю, что они запускаются в следующей микрозадаче, и поэтому они будут вести себя так же, как обработчики Promise: стрельба до следующей краски.

Я думаю, что я ответил на мой вопрос, но, возможно, подтверждение будет полезным.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector