Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我的脚本正在进行一些繁重的处理时,如何强制浏览器重新绘制?_Javascript_Html_Css_Dom - Fatal编程技术网

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线程可能会阻止其他线程执行。线程可能与浏览器的进程模型没有任何关系(每页一个进程或整个浏览器窗口一个进程)