Javascript-可以重用Date()对象吗?
是否可以创建一个新的Date()对象来获取当前日期,然后在一段时间后,重用相同的Date()对象来获取新的当前时间 似乎每次需要当前日期/时间时,都必须创建一个新的日期对象 在我的特定应用程序中,我希望运行一个动画,对于动画的每一帧,我都需要获取当前时间。因此,每一帧创建一个新的日期对象(可能是1000帧?)只会随着时间的推移提高内存使用率Javascript-可以重用Date()对象吗?,javascript,datetime,date,Javascript,Datetime,Date,是否可以创建一个新的Date()对象来获取当前日期,然后在一段时间后,重用相同的Date()对象来获取新的当前时间 似乎每次需要当前日期/时间时,都必须创建一个新的日期对象 在我的特定应用程序中,我希望运行一个动画,对于动画的每一帧,我都需要获取当前时间。因此,每一帧创建一个新的日期对象(可能是1000帧?)只会随着时间的推移提高内存使用率 这方面有什么线索吗?除非单独存储,否则日期对象会自动被垃圾收集。此外,您可以在每次迭代中创建并存储同一变量的当前日期,而不必担心内存膨胀 例如: var c
这方面有什么线索吗?除非单独存储,否则日期对象会自动被垃圾收集。此外,您可以在每次迭代中创建并存储同一变量的当前日期,而不必担心内存膨胀 例如:
var current = new Date()
for (var idx = 0; idx <= frameCount; ++idx) {
current = new Date();
// Do processing...
}
var current=新日期()
对于(var idx=0;idx如果您有现代浏览器,请调用
Date.now()
它返回一个包含历元时间的数字
数字是JavaScript中的基本元素,因此您不会创建任何新对象。但正如其他人所说,新对象并不是什么大问题
不过,您可能会对这种方法感兴趣,尤其是如果您不需要年、月和日,并且会对纪元时间感到满意的话。我想如果您真的想重用日期对象,可以使用从纪元时间派生的值调用setter,但我认为这种方法不会为您带来任何好处。如果您实际上不想使用date.now()
,不必创建date
对象
var t = Date.now(); // 1318479105311
您可以使用以下工具将其填充到较旧的浏览器中:
if( !Date.now ) Date.now = function(){ return +(new Date); };
现代浏览器有Date.now()
方法,它返回纪元时间而不创建对象。IE从版本9开始就有了它
我不确定这会有多大的优势,但是创建一个对象是非常便宜的。正如@icktoofay指出的,如果你不保留旧的日期,它们将被垃圾收集
编辑:。Date。现在,Chrome的速度实际上是Chrome的两倍,但是处于>3mhz的区域,我认为这对动画来说并不重要。如果你创建一个新的Date
对象,但是删除了对旧对象的引用,那么垃圾收集器就会得到它,并且内存使用不会随着时间的推移而增长。你的直觉是正确的t、 下面的答案有一些很好的选择。但是值得注意的是,JavaScript中的动画使用更为传统,如果你只针对现代浏览器,那么你应该研究一下。祝你好运!啊哈,这现在是有意义的。谢谢我认为new Date()的问题
在动画帧中,与其说是内存使用量激增,不如说是垃圾收集在清理丢弃的对象时在动画过程中暂停/抖动。