防止长时间运行的javascript锁定浏览器

Wil*_*rst 55 javascript

我有JavaScript执行大量的计算以及从DOM读取/写入值.该页面非常庞大,因此通常最终会锁定浏览器长达一分钟(有时更长时间使用IE),CPU占用率为100%.

是否有任何资源可以优化JavaScript以防止这种情况发生(我能找到的是如何关闭Firefox长时间运行的脚本警告)?

Pau*_*xon 50

如果您可以将计算算法转换为可以迭代调用的内容,则可以使用具有短超时值的setTimeout以频繁的间隔释放控制权.

例如,像这样......

function doCalculation()
{
   //do your thing for a short time

   //figure out how complete you are
   var percent_complete=....

   return percent_complete;
}

function pump()
{
   var percent_complete=doCalculation();

   //maybe update a progress meter here!

   //carry on pumping?
   if (percent_complete<100)
   {
      setTimeout(pump, 50);
   }
}

//start the calculation
pump();
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用`setTimeout(pump,0)`,你知道这是否仍然有用吗?或者这可能会预先占用响应鼠标输入的浏览器代码,更新进度表或其他DOM元素? (2认同)

Phi*_*l H 9

使用超时.

通过将循环的内容放入单独的函数中,并使用超时50左右的setTimeout()调用它们,javascript将产生对线程的控制并在稍后返回,允许UI获得顺便拜访.

有一个很好的workthrough 这里.