javascript – DOM渲染是否在单个(同步)函数执行期间被禁止阻止?

前端之家收集整理的这篇文章主要介绍了javascript – DOM渲染是否在单个(同步)函数执行期间被禁止阻止?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
DOM阻塞是很多人不熟悉 JavaScript严格的单线程同步执行模型的事情,但是它通常只是我们想以某种方式解决的问题(使用超时,网络工作者等).一切都很好.

但是,我想知道阻止实际的用户可见渲染是否可以实际依赖.我90%肯定在大多数浏览器中事实上都是如此,但我希望这不仅仅是一个快乐的一致事故.我似乎无法从DOM规范或MDM等供应商文档中找到任何明确的陈述.

令我担心的是,虽然看到页面的DOM更改确实不可见,但内部DOM几何(包括CSS转换和过滤器)在同步执行期间确实会更新.例如:

console.log(element.getBoundingRect().width);
element.classList.add("scale-and-rotate");
console.log(element.getBoundingRect().width);
element.classList.remove("scale-and-rotate");

…确实会报告两个不同的宽度值,但页面似乎不会闪烁.在添加类(使用while循环)后同步等待也不会使临时更改可见.在Chrome中执行时间轴跟踪显示内部绘制和重新绘制正在发生相同,这是有道理的……

我担心的是,缺乏一个特定的原因,一些浏览器,比如那些处理动力不足的移动cpu的浏览器,可能会选择在该功能的执行过程中实际反映用户可见布局中的那些内部计算,从而导致丑陋在这种临时行动期间“闪光”.所以,更具体地说,我要问的是:他们有特定的理由不这样做吗?

(如果你想知道为什么我会关心这一点,我有时需要使用getBoundingRect为某个状态的元素测量计算尺寸,以计划间距或动画或其他类似的东西,而不是实际将它们置于该状态或首先为它们设置动画…)

解决方法

Javascript中与并发相关的任何内容都不是事实上的. JS根本没有定义并发模型.一切都是快乐事故或多年的共识.

也就是说,如果你的函数没有调用奇怪的东西,如XMLHttpRequest或“alert”或类似的东西,你基本上可以将它视为单线程而没有中断.

猜你在找的JavaScript相关文章