【发布时间】:2012-01-27 14:58:58
【问题描述】:
前言:我的个人网站上有一个demo of the problem(希望没问题。如果没有,我可以尝试在 jsfiddle 上进行设置)。我打算让这个问题变得有趣一点,同时也尝试了解 javascript 中的时间函数。
我在超时时增加进度条的值。理想情况下(如果函数即时运行)它们应该以相同的速度填充,但在现实世界中,它们不会。代码是这样的:
function setProgress(bar, myPer) {
bar.progressbar({ value: myPer })
.children('.ui-progressbar-value')
.html(myPer.toPrecision(3) + '%')
.attr('align', 'center');
myPer++;
if(myPer == 100) { myPer = 0; }
}
function moveProgress(bar, myPer, inc, delay){
setProgress(bar, myPer);
if(myPer >= 100) { myPer = 0; }
setTimeout(function() { moveProgress(bar, myPer+inc, inc, delay); }, delay);
}
$(function() {
moveProgress($(".progressBar#bar1"), 0, 1, 500);
moveProgress($(".progressBar#bar2"), 0, 1, 500);
moveProgress($(".progressBar#bar3"), 0, .1, 50);
moveProgress($(".progressBar#bar4"), 0, .01, 5);
});
天真地,人们会认为应该以相同的速度运行(填充进度条)。
但是,在前两个条中,(如果我们将“设置进度条”称为单个操作)我每 500 毫秒执行一次操作,总共 500 次操作来填充进度条;第三,我每 50 毫秒执行一次操作,总共 5,000 次操作以填充条形图;在第四个中,我每 5 毫秒执行一次操作,总共 50,000 次操作来填充条形图。
我的代码的哪一部分花费时间最长,会导致这些速度差异,并且可以进行更改以使它们看起来以它们的方式运行(第四条的增量较小),但也可以在速度一样吗?
【问题讨论】:
-
如果我没看错,您的标签在示例网站上已关闭。第 4 小节不是每 5 毫秒 .01 次吗?
-
@JamesMontagne 哎呀。谢谢。固定。
-
请注意,
setTimeout调用的延迟可能会限制在最小值; html5 浏览器(和 Chrome)为 4 毫秒,但这取决于浏览器。即它可能会将其限制为更大的值,例如 10 毫秒。
标签: javascript optimization time