8

我想在浏览器窗口中运行一些计算,但我不希望它减慢客户端计算机的用户交互速度,尤其是对于单核机器。有什么方法可以调整我执行 JavaScript 的良好级别,以便它在不影响机器响应能力的情况下尽可能快地执行?

4

5 回答 5

3

除了延迟执行您的计算之外,我想不出别的办法。例如,将所有工作分成小块,然后在每个任务之间有一些延迟(使用setTimeoutor )按顺序运行它们。setInterval

于 2010-04-24T08:31:34.437 回答
3

创建开环......一个例子

这是一个闭环

for( i = 0 ; i < 10000 ; i++)
{
    doSomeMath(i);
}

这是一个开环

i = 0;
iMax = 10000
var MyWorkingThread =
setInterval(function()
{
    if( i < iMax)
    {
       doSomeMath(i);           
       i++;
    }
    else
    {
        clearInterval(MyWorkingThread);
    }

},1);

您可以在开环内做更多或更少的工作,但这是一般的想法。我已经为类似的问题做了很多次,我让浏览器工作得非常顺利。

于 2010-04-24T09:01:52.130 回答
2

为了加快速度,尝试使用单个多维数组来包含数据,然后在函数结束时使用单个连接将该数组转换为字符串以进行输出,并使用 innerHTML 方法输出该数据。这是在 JavaScript 中包含和提供数据的最快方法。绝对不要使用 DOM 方法或元素来输出数据,因为这样会慢 4 倍。

尽可能少地输出数据。这将取决于您使用哪个事件来执行您的功能。我建议不要使用 onload 事件,因为这会减慢页面的初始加载时间。我建议使用与按钮关联的 onclick 函数,因为这样用户就会意识到他们导致执行减慢了您的页面。

于 2010-04-24T08:35:07.377 回答
1
  1. 使用 ajax 请求在服务器上运行计算
  2. 打开一个新窗口或框架并在那里运行代码
  3. 在分成间隔的循环中运行代码
  4. 准备好使用 web-worker 进程(html5 异步脚本)
于 2010-04-24T14:08:59.187 回答
1

我做了一些测试,浏览器在工作之间需要相当长的时间才能做出合理的响应:

function work(cnt) {
  // do some heavy work
  for (var i=0;i<100000000;i++) ;
  // start next work
  if (cnt > 0) {
    window.setTimeout(function(){work(cnt-1);},200);
  }
}
于 2010-04-24T08:50:19.697 回答