【发布时间】:2012-12-09 11:23:54
【问题描述】:
我不太确定这个的技术术语是什么。我有一个带有交互式图形的 GUI。用户与 GUI 交互后,我需要执行一些 CPU 密集型操作。但是,用户输入非常频繁,所以我只想在例如之后调用该函数。 1000 毫秒无用户输入。在我使用的模式下方:
scheduler = (function(){
var timer;
function exec(call, delay){
clearTimeout(timer);
timer = setTimeout(call, delay);
};
return exec;
})()
即如果对 scheduler 的 3 次调用是紧随其后完成的,则实际上只会执行最后一个:
scheduler(function(){alert('foo')}, 1000);
scheduler(function(){alert('bar')}, 1000);
scheduler(function(){alert('zoo')}, 1000);
它似乎有效,但感觉有点 hacky 我有点担心 Javascript setTimeout 的任何警告,尤其是范围问题。这看起来像是我可以在更大范围内使用的可靠模式吗?当settimeout 调用它时,我传递给scheduler 的内联函数是否能够像往常一样在其词法范围内查找所有对象?如果我有几个这样的调度程序实例怎么办?他们能互相干扰吗?有没有其他方法可以做到这一点?
【问题讨论】:
-
您是希望只运行最后一个动作还是希望运行所有动作?
-
常见情况,常见解决方案。你需要
throttle或debounce函数(benalman.com/projects/jquery-throttle-debounce-plugin 或code.google.com/p/jquery-debounce 或类似的东西)
标签: javascript jquery node.js dom-events settimeout