我正在使用 jQuery Mobile 和 cordova 开发一个应用程序,我的应用程序中有一个倒计时(这是一个添加到我的项目中的插件),我希望当这个计时器达到 10 秒时,调用一个特定的函数。第一个选项是每秒检查一次我的倒计时,但是对于某些性能问题这是不可能的,这不太合理,因为我的倒计时可能显示 5 天。另一种选择是使用 setTimeout,但我认为这会降低性能。不会吗?
假设 setTimeout(function{//function call}, 14400000)
仅持续 4 小时,更不用说几天了。
如果它确实降低了性能,我还有哪些其他选择? node.js 中是否有类似 crone 的 javascript 或 jQuery 之类的东西,以便我们可以指定调用函数的时间和日期?
我的意思是,如果我可以为函数调用设置时间和日期,例如 2016-09-01 15:10:40,那会很好
发送
最佳答案
调用 setTimeout
的性能损失可以忽略不计。解决您描述的问题的最佳方法是计算当前时间与您要执行代码的时间之间的毫秒数,并使用该值作为超时调用 setTimeout
。然而,有一个问题你必须要注意,正如@Vld 所概述的:延迟参数被一些浏览器存储为 32 位整数,所以我们需要解决这个问题并定期重新创建超时,直到我们到达我们想要的日期。
此外,您还必须注意示例代码中用于futureDate
参数的日期是UTC 时区,因此请务必在使用前将本地时间转换为UTC。你可以使用的一个很好的图书馆是 Moment.js .
代码如下:
function scheduleExecution(futureDate, callback) {
// Set an intermediary timeout at every 1 hour interval, to avoid the
// 32 bit limitation in setting the timeout delay
var maxInterval = 60 * 60 * 1000;
var now = new Date();
if ((futureDate - now) > maxInterval) {
// Wait for maxInterval milliseconds, but make
// sure we don't go over the scheduled date
setTimeout(
function() { scheduleExecution(futureDate); },
Math.min(futureDate - now, maxInterval));
} else {
// Set final timeout
setTimeout(callback, futureDate - now);
}
}
// This example uses time zone UTC-5. Make sure to use the
// correct offset for your local time zone
var futureDate = new Date("2020-09-01T17:30:10-05:00");
scheduleExecution(futureDate, function() {
alert('boom!');
});
关于javascript - 在特定时间(和日期)调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279456/