是否可以创建一个新的Date()对象来获取当前日期,然后在一段时间之后,重用相同的Date()对象来获取新的当前时间?
似乎每次想要当前日期/时间时都必须创建一个新的Date对象。
在我的特定应用程序中,我想要运行动画,并且对于动画的每一帧,我需要获取当前时间。那么每一帧(可能是1000帧的帧)创建一个新的Date对象只会增加内存使用量。
有关此问题的任何线索吗?
答案 0 :(得分:5)
除非您单独存储它们,否则您的日期对象会自动进行垃圾回收。此外,您可以在每次迭代时将当前日期存储到同一个变量,而不必担心内存耗尽。
例如:
var current = new Date()
for (var idx = 0; idx <= frameCount; ++idx) {
current = new Date();
// Do processing...
}
在这种情况下,您不会使用越来越多的内存,因为旧日期在被覆盖后将被垃圾收集。
答案 1 :(得分:2)
如果您实际上不想要日期,而是以毫秒为单位的时间,请使用Date.now()
,这样您就不必创建Date
对象。
var t = Date.now(); // 1318479105311
您可以使用以下命令将其填充到旧版浏览器中:
if( !Date.now ) Date.now = function(){ return +(new Date); };
答案 2 :(得分:0)
如果您有现代浏览器,请致电
Date.now()
返回包含纪元时间的数字。
Numbers是JavaScript中的原语,因此您不会创建任何新对象。但正如其他人所说,新对象并不是一件大事。
你仍然可能对这种方法感兴趣,特别是如果你不需要年,月和日,并且会对纪元时间感到满意。我想如果你真的想要重用日期对象,你可以使用从纪元时间派生的值调用setter,但我认为这种方法不会给你带来什么。
答案 3 :(得分:0)
现代浏览器使用Date.now()
方法返回纪元时间而不创建对象。 IE从版本9开始就有它。
我不确定这会带来多大的好处,但创建一个对象非常便宜。正如@icktoofay指出的那样,如果你不保留旧日期,他们将被垃圾收集。
编辑:here's a benchmark on both。 Date.now
实际上是Chrome的两倍,但是在&gt;中3mhz区域我不认为这对动画很重要。