我知道,当存在 CPU 密集型代码时,任何先前的 DOM 更新都不会发生。例如
function blockFor(dur){
var now = new Date().getTime();
while (new Date().getTime() < now + dur);
result.textContent = "I am done..!";
}
result.textContent = "Please remain..."; // we will never see this
blockFor(2000);Run Code Online (Sandbox Code Playgroud)
<p id="result"></p>Run Code Online (Sandbox Code Playgroud)
但是,如果我将 CPU 密集型代码转移到异步时间线,那么setTimeout一切都很好,如以下代码片段所示。
function blockFor(dur){
var now = new Date().getTime();
while (new Date().getTime() < now + dur);
result.textContent = "I am done..!";
}
result.textContent = "Please remain..."; // now you see me
setTimeout(_ => blockFor(2000),15); // 15ms to be on …Run Code Online (Sandbox Code Playgroud)