Performans - Date.now () ile Date.getTime () karşılaştırması


113
var timeInMs = Date.now();

MDN başına

vs.

var timeInMs = new Date(optional).getTime();

MDN başına .

Sözdizimi ve ikinci sürümde isteğe bağlı olarak Tarihi (güncel değil) ayarlama yeteneği dışında ikisi arasında herhangi bir fark var mı?

Date.now () daha hızlı - jsperf'e bakın


55
önemseyen herkes için Date.now () Internet Explorer'ın IE9'dan önceki sürümlerinde çalışmaz. Ben kendimi umursamıyorum
guido

8
Ne olursa olsun, Date.now () 'un IE <9 üzerinde çalışmasını sağlamak için developer.mozilla.org/en-US/docs/JavaScript/Reference/…' de bahsedilen uyumluluk simidini ekleyebilirsiniz .
jrajav

Yanıtlar:


105

Bunlar aynıdır ( anlamsal olarak düzenleyin ; performans ile biraz daha iyi .now()):

var t1 = Date.now();
var t2 = new Date().getTime();

Bununla birlikte, önceden oluşturulmuş herhangi bir Dateörnekten gelen zaman değeri, oluşturulma anında (veya hangi saat / tarihe ayarlanmışsa) dondurulur. Yani, eğer bunu yaparsan:

var now = new Date();

ve sonra bir süre bekleyin, sonraki çağrı now.getTime(), değişkenin ayarlandığı noktadaki zamanı söyleyecektir.


Programın başlangıcında bir tarih nesnesi oluşturmanın ve ardından yalnızca o tarih nesnesini güncellemenin ( dateObj.setTime(Date.now())) veya Dateyöntemlere erişmesi gereken (örneğin dateObj.getMinutes()) eşzamansız bir şeyi her yaptığınızda yeni tarih nesneleri oluşturmanın daha performanslı olacağını düşünüyor musunuz ?
doubleOrt

3
@Taurus modern JavaScript çalışma zamanları , nesne oluşturma ve çöp toplamada son derece iyidir. Bir tür gerçek zamanlı oyun çekirdeği üzerinde çalışmadığınız sürece, endişelenmenize gerek yok. İyi görünen ve kırılgan olmayan bir kod yazın.
Pointy

1
teşekkürler dememeliydim ama teşekkürler (umarım bunu bir kereden fazla yapmamışımdır).
doubleOrt

57

Etkili olarak eşdeğerdirler, ancak kullanmalısınız Date.now(). Daha net ve yaklaşık iki kat daha hızlı.

Düzenleme: Kaynak: http://jsperf.com/date-now-vs-new-date


1
Bunun nedeni Date(optional).getTime();geçerli saati almadan önce yeni bir Date nesnesi almak için alan ayırmak zorunda mı?
Charlie G

Muhtemelen evet. Yine de, nesnenin gerçek tahsisi yerine Date kurucusunun yaptığı her şeyle daha fazla ilgisi olmasını beklerdim.
jrajav

Evet, bunu titizlikle ekledim - tahsisatı ve bir nesne yaratmakla birlikte gelen her şeyi kastettim.
Charlie G

4

Bunu yaptığınızda (new Date()).getTime()yeni bir Date nesnesi oluşturursunuz. Bunu tekrar tekrar yaparsanız, Date.now () 'dan yaklaşık 2 kat daha yavaş olacaktır.

Aynı ilke Array.prototype.slice.call(arguments, 0)vs için de geçerli olmalıdır[].slice.call(arguments, 0)


3

Evet doğru; şimdiki zamanı kullanırken etkin bir şekilde eşdeğerdirler.


2

Bazen, yeniden somutlaştırmadan Date'in yöntemlerine erişim sağlamak için bazı zaman izleme değişkenlerini yalnızca birkaç milisaniye yerine bir Date nesnesi biçiminde tutmak tercih edilir. Bu durumda, Date.now () hala yeni Date () veya benzerini kazanır, ancak Chrome'umda yalnızca yaklaşık% 20 ve IE'de küçük bir miktar ile.

JSPERF'imi gör

timeStamp2.setTime(Date.now()); // set to current;

vs.

timeStamp1 = new Date(); // set to current;

http://jsperf.com/new-date-vs-settime

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.