Javascript 当我的脚本正在进行一些繁重的处理时,如何强制浏览器重新绘制?
我正在使用Javascript 当我的脚本正在进行一些繁重的处理时,如何强制浏览器重新绘制?,javascript,html,css,dom,Javascript,Html,Css,Dom,我正在使用innerHTML属性动态修改DIV,以报告需要几秒钟才能完成的进程。问题是,在Firefox上,直到脚本完成后,页面才真正重新呈现以反映该更改。这让应用程序感觉迟钝。有没有办法确保对HTML的更改立即显示出来,即使有更多的脚本正在运行 浏览器是单线程的。脚本运行时,浏览器无法执行任何其他操作。如果你想做一些像进度表的事情,你必须使用,或者,并将你的任务分解成更小的块,在一定的时间间隔内运行。这会在脚本运行之间留下间隙,将控制权交还给浏览器,浏览器可以在浏览器中重新绘制。请尝试定期中断
innerHTML
属性动态修改DIV
,以报告需要几秒钟才能完成的进程。问题是,在Firefox上,直到脚本完成后,页面才真正重新呈现以反映该更改。这让应用程序感觉迟钝。有没有办法确保对HTML的更改立即显示出来,即使有更多的脚本正在运行 浏览器是单线程的。脚本运行时,浏览器无法执行任何其他操作。如果你想做一些像进度表的事情,你必须使用,或者,并将你的任务分解成更小的块,在一定的时间间隔内运行。这会在脚本运行之间留下间隙,将控制权交还给浏览器,浏览器可以在浏览器中重新绘制。请尝试定期中断脚本。你应该能够使用
setTimeout(nextFunction, 0);
在没有长时间延迟的情况下提供必要的中断,其中nextFunction是继续进行长时间处理的功能。浏览器似乎不是单线程的。它有一个javascript线程,但有一个并行线程,用于呈现页面和操纵DOM,这实际上取决于您所谈论的浏览器。有些人现在可能会这样做,比如chrome的多进程模型——每个浏览器的内容都是一个独立的进程,chrome也有自己的进程。但是您仍然可以使用
轻松挂起任何浏览器,而(1)
。挂起的浏览器数量取决于浏览器的构建方式。您可以通过调用while(1){}挂起js线程,但这并不意味着没有其他线程用于dom操作或内容呈现。这意味着JS线程可能会阻止其他线程执行。线程可能与浏览器的进程模型没有任何关系(每页一个进程或整个浏览器窗口一个进程)