Kinerja - Date.now () vs Date.getTime ()

113
var timeInMs = Date.now();

per MDN

vs.

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

per MDN .

Apakah ada perbedaan antara keduanya, selain sintaks dan kemampuan untuk mengatur Tanggal (bukan yang sekarang) melalui opsional di versi kedua?

Date.now () lebih cepat - lihat jsperf


sumber
55
bagi siapa pun yang peduli, Date.now () tidak berfungsi di versi Internet Explorer sebelum IE9. Saya sendiri tidak peduli
guido
8
Untuk apa nilainya, Anda dapat menambahkan shim kompatibilitas yang disebutkan di developer.mozilla.org/en-US/docs/JavaScript/Reference/… untuk membuat Date.now () berfungsi di IE <9, juga.
jrajav
jsben.ch/#/TOF9y
EscapeNetscape

Jawaban:

105

Hal-hal ini sama ( edit secara semantik; kinerja sedikit lebih baik dengan .now()):

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

Namun, nilai waktu dari setiap Dateinstance yang sudah dibuat dibekukan pada saat pembuatannya (atau pada waktu / tanggal apa pun yang telah ditetapkan). Artinya, jika Anda melakukan ini:

var now = new Date();

dan kemudian tunggu beberapa saat, panggilan berikutnya ke now.getTime()akan memberi tahu waktu pada titik variabel ditetapkan.

Runcing
sumber
Apakah menurut Anda akan lebih baik jika membuat satu objek tanggal di tanda awal program dan kemudian memperbarui objek tanggal tersebut ( dateObj.setTime(Date.now())) atau membuat objek tanggal baru setiap kali Anda melakukan sesuatu yang tidak sinkron yang perlu mengakses Datemetode (seperti dateObj.getMinutes())?
doubleOrt
3
Runtime JavaScript modern @Taurus sangat bagus dalam pembuatan objek dan pengumpulan sampah. Kecuali Anda sedang mengerjakan semacam kernel game real-time, tidak ada alasan sama sekali untuk mengkhawatirkannya. Tulis kode yang terlihat bagus dan tidak rapuh.
Pointy
1
tidak seharusnya mengucapkan terima kasih tetapi terima kasih (saya harap saya belum melakukan ini lebih dari sekali).
doubleOrt
57

Mereka secara efektif setara, tetapi Anda harus menggunakannya Date.now(). Ini lebih jelas dan dua kali lebih cepat.

Edit: Sumber: http://jsperf.com/date-now-vs-new-date

jrajav.dll
sumber
1
Apakah ini karena Date(optional).getTime();harus mengalokasikan ruang untuk mendapatkan objek Tanggal baru sebelum mendapatkan waktu saat ini?
Charlie G
Mungkin iya. Saya berharap bahwa itu lebih berkaitan dengan segala sesuatu yang dilakukan konstruktor Tanggal daripada alokasi objek yang sebenarnya.
jrajav
Ya, saya menambahkan hasily itu - maksud saya alokasi dan segala sesuatu yang menyertai pembuatan objek.
Charlie G
4

Saat Anda melakukannya, (new Date()).getTime()Anda membuat objek Tanggal baru. Jika Anda melakukan ini berulang kali, ini akan menjadi sekitar 2x lebih lambat dari Date.now ()

Prinsip yang sama harus diterapkan untuk Array.prototype.slice.call(arguments, 0)vs.[].slice.call(arguments, 0)

Gregory Magarshak
sumber
3

Ya itu benar; mereka secara efektif setara saat menggunakan waktu saat ini.

Brett Zamir
sumber
2

Terkadang lebih baik menyimpan beberapa variabel pelacakan waktu dalam format objek Tanggal daripada hanya beberapa milidetik, untuk memiliki akses ke metode Tanggal tanpa memberi contoh ulang. Dalam hal ini, Date.now () masih menang atas Date baru () atau sejenisnya, meskipun hanya sekitar 20% di Chrome saya dan sedikit di IE.

Lihat JSPERF saya di

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

vs.

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

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

SashaK
sumber