如何在漫长的javascript计算过程中强制在浏览器中进行UI更新?

我在Web应用程序中有一个位置,我在浏览器中使用JavaScript进行了大量计算。 它们可能需要不到一秒钟到大约一分钟才能运行,我想在此步骤中显示进度对话框,但是在我的计算完成之后才会显示对话框。 我开始只是尝试显示一个jquery对话框:

HTML:

 
This should show up immediately on clicking the button.

脚本:

 $(function() { $("#startwork").click(function () { $("#dialog").dialog("open"); // Do some lengthy calculations for (var i=0; i<1000000000; i++) { var foo = Math.random(); } $("#dialog").dialog("close"); alert("done"); }); $("#dialog").dialog({ autoOpen: false }); }); 

我可以做些什么来强制UI在计算开始之前以及在计算期间的定义间隔进行更新?

setTimeout冗长的计算:

 setTimeout(function() { // some length calculations }, 0); 

setTimeout之后应该没有更多的脚本。

 $(function() { $("#startwork").click(function () { $("#dialog").dialog("open"); setTimeout(function() { // some length calculations for (var i=0; i<1000000000; i++) { var foo = Math.random(); } $("#dialog").dialog("close"); alert("done"); }, 0); }); $("#dialog").dialog({ autoOpen: false }); }); 

如果要在计算发生时显示对话框,请在显示对话框后使用setTimeout调用长计算。 如果要显示进度条,则必须在处理过程中的方便点使用一系列setTimeout调用。 当一个结束时,它会更新进度条并调用下一个进度条,直到完成所有操作。

但是,在运行任何特定脚本时,UI将被阻止。

我找到了这个教程,并根据我的需要进行了调整

http://www.ultramegatech.com/blog/2010/10/create-an-upload-progress-bar-with-php-and-jquery/

它似乎对我有用