是否可以创建一个新的Date()对象来获取当前日期,然后在一段时间后重复使用同一个Date()对象来获取新的当前时间?
似乎每次想要获取当前日期/时间都必须创建一个新的Date对象。
在我的应用程序中,我想运行一个动画,并且对于每个动画帧,我都需要获取当前时间。因此,每个帧都创建一个新的Date对象(可能是1000多个帧?)只会增加内存使用量。
有关此问题的任何提示吗?
是否可以创建一个新的Date()对象来获取当前日期,然后在一段时间后重复使用同一个Date()对象来获取新的当前时间?
似乎每次想要获取当前日期/时间都必须创建一个新的Date对象。
在我的应用程序中,我想运行一个动画,并且对于每个动画帧,我都需要获取当前时间。因此,每个帧都创建一个新的Date对象(可能是1000多个帧?)只会增加内存使用量。
有关此问题的任何提示吗?
var current = new Date()
for (var idx = 0; idx <= frameCount; ++idx) {
current = new Date();
// Do processing...
}
new Date()
的问题不是内存使用量的增加,而是在清理被丢弃的对象时会发生垃圾回收暂停/抖动,从而影响您的动画。 - jfunk如果你实际上不需要日期,而是需要毫秒级的时间,请使用 Date.now()
,这样你就不必创建一个 Date
对象。
var t = Date.now(); // 1318479105311
您可以使用以下代码在旧版浏览器中进行兼容:
if( !Date.now ) Date.now = function(){ return +(new Date); };
Date.now()
该函数返回一个包含时代时间的数字。
在JavaScript中,数字是原始类型,因此您不会创建任何新对象。但正如其他人所说,新对象并不是太大的问题。
如果您不需要年、月和日,并且满意于时代时间,则仍然可能对此方法感兴趣。我想,如果您真的想重用日期对象,可以使用从时代时间派生的值调用设置器,但我认为这种方法并没有带来任何好处。
Date.now()
方法,它返回Date.now
在Chrome中实际上是两倍快,但由于它在> 3mhz区域内,我认为这对于动画来说并不重要。
Date
对象,但随后丢弃了对旧对象的引用,则垃圾回收器将会处理它,并且内存使用量不会随时间增长。 - icktoofaysetTimeout()
或setInterval()
进行动画更为常规,如果你只针对现代浏览器,你应该研究一下requestAnimationFrame
。祝好运! - Jordan Running