javascript - 回流/渲染的时间如何工作?

标签 javascript dom

给定这段代码:

$('#foo').css('height', '100px'); // or any other change to the DOM
console.log('done!');

当第二条语句执行时,是否可以安全地假设回流已完成?

跟随问题:如果你用这个替换第二行,它会改变答案吗?

window.setTimeout('console.log("done");', 1);

我希望我的基本问题很清楚。非常感谢任何输入。

最佳答案

浏览器通常会将需要回流/重绘的 DOM 修改排队,以避免多次执行该昂贵的操作。然而,也有异常(exception),正如您在本问答中所见:When does reflow happen in a DOM environment? .

考虑到您发布的代码,并假设控制台将同步记录输出*,您第一个问题的答案是。如果您只是更改元素的高度,浏览器通常会在执行回流/重绘操作之前完成所有其他同步代码的运行。但是,正如上面链接中的答案所说,某些操作确实会触发立即回流,因此无法回答您问题的“或对 DOM 的任何其他更改”部分。

考虑到上述相同的假设,第二个问题的答案是肯定的。字符串“done”将在浏览器事件循环的下一个滴答中记录到控制台,因此可以安全地假设这是在回流之后。

通常您不必担心这种浏览器行为,除非您正在优化代码以提高性能并尝试避免回流。

* 有时控制台输出比预期晚;不幸的是,我找不到一个好的链接。

关于javascript - 回流/渲染的时间如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752762/

相关文章:

javascript - (this).parent().find 无法在 ajax 调用中获取响应

.net - xPath 与 DOM API,哪个具有更好的性能

javascript - firefox 查看源代码

javascript - 获取其自己窗口内的骰子总数。并不是所有的 window

javascript - Durandal 模态回调

javascript - 使用 D3 创建 HTML 表格时,将某些数据用于行类而不是单元格

javascript - 在 javascript 中正确引用 html 列表项对象以进行事件注册

javascript - 从 javascript FileReader onload 事件计算的返回值

javascript - 图表中的工具提示中的日期错误, Highcharts 中的夏令时

javascript - jQuery click 函数只执行一次