是否可以創建一個新的Date()對象來獲取當前日期,然後在一段時間後再次使用相同的Date()對象獲取新的當前時間?Javascript - 你可以重用Date()對象嗎?
看來您必須在每次需要當前日期/時間時創建一個新的Date對象。
在我特別的應用程序中,我想運行一個動畫,並且每一幀動畫都需要獲取當前時間。因此,每一幀創建一個新的Date對象(可能是1000幀),隨着時間的推移,它會增加內存使用量。
這一個的任何線索?
是否可以創建一個新的Date()對象來獲取當前日期,然後在一段時間後再次使用相同的Date()對象獲取新的當前時間?Javascript - 你可以重用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()
返回包含了劃時代的時間數。
數字是JavaScript中的基元,因此您不會創建任何新對象。但正如其他人所說的那樣,新的對象並不是什麼大事。
不過你可能會對這種方法感興趣,特別是如果你不需要年,月,日,並且會滿足時代的要求。我想,如果你真的想要想要重用一個日期對象,你可以調用setters來從時代衍生出來的值,但是我不認爲這種方法會爲你購買任何東西。
如果您實際上不想要日期,而是以毫秒爲單位的時間,請使用Date.now()
,因此您不必創建Date
對象。
var t = Date.now(); // 1318479105311
你可以用墊片成舊的瀏覽器:
if(!Date.now) Date.now = function(){ return +(new Date); };
現代瀏覽器有Date.now()
方法,該方法返回
時代
時間,而無需創建一個對象。 IE從版本9開始。
我不確定這會帶來很多好處,但創建一個對象相當便宜。正如@icktoofay指出的那樣,如果你不保留舊日期,他們將被垃圾收集。編號:here's a benchmark on both。 Date.now
實際上是Chrome的兩倍,但是在> 3mhz的區域中,我認爲這對於動畫並不重要。
如果您正在創建一個新的Date對象,但隨後將引用刪除,那麼垃圾收集器將獲得它,並且內存使用量不會隨着時間增長。 – icktoofay
你的直覺是對的,下面的答案有一些很好的選擇。但值得注意的是,對於動畫來說,使用['setTimeout()'或'setInterval()'](http://www.schillmania.com/content/projects/javascript-animation-1/)更傳統JavaScript,如果你只針對現代瀏覽器,你應該看看['requestAnimationFrame'](https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame#AutoCompatibilityTable)。祝你好運! –