我想在浏览器窗口中运行一些计算,但我不希望它减慢客户端计算机的用户交互速度,尤其是对于单核机器。有什么方法可以调整我执行 JavaScript 的良好级别,以便它在不影响机器响应能力的情况下尽可能快地执行?
问问题
140 次
5 回答
3
除了延迟执行您的计算之外,我想不出别的办法。例如,将所有工作分成小块,然后在每个任务之间有一些延迟(使用setTimeout
or )按顺序运行它们。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
- 使用 ajax 请求在服务器上运行计算
- 打开一个新窗口或框架并在那里运行代码
- 在分成间隔的循环中运行代码
- 准备好使用 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 回答