当我的脚本执行一些繁重的处理时,如何强制浏览器重绘?

时间:2009-07-30 22:12:22

标签: javascript html css dom

我正在使用innerHTML属性动态修改DIV,以报告需要几秒钟才能完成的过程。问题是在Firefox上,在脚本完成之前,页面实际上并未重新呈现以反映该更改。这使得应用程序感觉迟钝。有没有办法确保即使运行更多脚本,HTML的更改也会立即显示?

2 个答案:

答案 0 :(得分:14)

浏览器是单线程的。在脚本运行时,浏览器无法执行任何其他操作。如果你想做一个像进度表这样的东西,你必须使用setTimeout()setInterval(),并将你的任务分解成一个间隔运行的较小的块。这会在脚本运行之间留下空白,从而将控制权交还给浏览器,浏览器可以重新绘制。

答案 1 :(得分:6)

尝试定期中断脚本。你应该可以使用

setTimeout(nextFunction, 0); 

在没有长时间延迟的情况下提供必要的中断,其中nextFunction是继续进行冗长处理的函数。