Javascript MutationOrberServer回调是否在修改观察到的元素的同一动画帧中触发?

Javascript MutationOrberServer回调是否在修改观察到的元素的同一动画帧中触发?,javascript,dom,dom-events,requestanimationframe,Javascript,Dom,Dom Events,Requestanimationframe,假设我对使用window.requestAnimationFrame创建的框架内的元素进行了更改,并且MutationObserver正在观察修改后的元素。mutationorserver的更改处理程序是否在同一帧内启动,并且在浏览器执行帧后的渲染之前启动 (我可以想象,对于某些polyfill,这可能不是真的。我很好奇,是否有任何保证可以保证在本机实现中是真的。) 编辑:一个可能更好的问题是,它可以间接回答这个问题,也可以解释承诺行为,或者使用微任务的任何其他行为 17年7月19日编辑:我想

假设我对使用
window.requestAnimationFrame
创建的框架内的元素进行了更改,并且
MutationObserver
正在观察修改后的元素。
mutationorserver
的更改处理程序是否在同一帧内启动,并且在浏览器执行帧后的渲染之前启动

(我可以想象,对于某些polyfill,这可能不是真的。我很好奇,是否有任何保证可以保证在本机实现中是真的。)

编辑:一个可能更好的问题是,它可以间接回答这个问题,也可以解释承诺行为,或者使用微任务的任何其他行为


17年7月19日编辑:我想知道这一点的原因是,我想知道如何准确地修改DOM和基于DOM变化进行自定义渲染(f.e.WebGL)可以与浏览器的绘制保持同步

例如,假设我的自定义元素的用户使用
requestAnimationFrame
,然后修改我的webgl自定义元素的某些属性。我希望能够保证,我可以在浏览器绘制动画帧之后的浏览器绘制之前对这些更改做出反应,执行用户期望的webgl渲染,并在下一帧中显示这些更改,而不是在以后的任何帧中

基于某些理论,我知道Promise微任务在当前宏任务之后触发,并且基于,我已经验证了在动画帧中定义的Promise处理程序将在下一个浏览器绘制之前触发

将此扩展到突变观察者,我相信他们在下一个微任务中开火,因此他们的行为将与承诺处理程序相同:在下一次绘制之前开火


我想我已经回答了我的问题,但也许确认会有好处。

MutationObserver
是异步的。这一变化将在未来的一段时间内报告。@torazaburo我知道,但这并不意味着它不可能在同一动画帧内触发。例如,
Promise
s可以在将来某个时候在同一动画帧内的未来微刻度上填充,但在帧结束之前(我在Chrome中验证了此行为:)你读了吗?@Maximus是的,我读了,我还读了MutationObserver和requestAnimationFrame上的规范,但仍然不清楚。@trusktr,据我所知,MutationObserver处理程序被安排为微任务,因此它们应该在浏览器重新渲染之前执行-在同一动画帧中