2012-09-20 18 views
64
var timeInMs = Date.now(); 

per MDNPrestazioni - Date.now() vs Date.getTime()

vs.

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

per MDN.

C'è qualche differenza tra i due, oltre alla sintassi e la possibilità di impostare la Data (non quella corrente) tramite opzionale nella seconda versione?

Date.now() è più veloce - Vai alle jsperf

+34

. Io stesso non mi interessa –

+8

Per quello che vale, puoi aggiungere lo shim di compatibilità menzionato in https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now per rendere Date.now() funziona anche su IE <9. – jrajav

+0

http://jsben.ch/#/TOF9y – EscapeNetscape

risposta

2

Sì, è corretto; sono effettivamente equivalenti quando si usa l'ora corrente.

60

Queste cose sono le stesse (modificare semanticamente, le prestazioni è un po 'meglio con .now()):

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

Tuttavia, il valore del tempo da qualsiasi già creato Date esempio è congelato al momento della sua costruzione (o in qualsiasi momento/data in cui è stato impostato). Cioè, se si esegue questa operazione:

var now = new Date(); 

e poi aspettare un po ', una successiva chiamata a now.getTime() dirà il tempo al punto la variabile è stata impostata.

+6

http://jsperf.com/gettime-vs-now-0 –

+9

now() è più veloce. –

+0

Pensa che sarebbe più performante creare un oggetto data all'inizio del programma e poi aggiornare solo quell'oggetto data ('dateObj.setTime (Date.now())') o creare nuovi oggetti data ogni volta che fai qualcosa di asincrono che deve accedere ai metodi 'Date' (come' dateObj.getMinutes() ')? – Taurus

31

Sono equivalenti in modo efficace, ma è necessario utilizzare Date.now(). È più chiaro e circa il doppio più veloce.

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

+0

Ciò è dovuto al fatto che 'Date (opzionale) .getTime();' deve allocare spazio per ottenere un nuovo oggetto Date prima di ottenere l'ora corrente? –

+0

Probabilmente sì. Mi aspetto che abbia più a che fare con tutto ciò che sta facendo il costruttore di Date piuttosto che con l'effettiva allocazione dell'oggetto. – jrajav

+0

Sì, l'ho aggiunto con voce concisa: intendevo l'allocazione e tutto ciò che va insieme alla creazione di un oggetto. –

3

Quando si esegue (new Date()).getTime() si sta creando un nuovo oggetto Date. Se si esegue questa operazione più volte, si sarà di circa 2 volte più lento rispetto Date.now()

Lo stesso principio dovrebbe valere per Array.prototype.slice.call(arguments, 0) vs [].slice.call(arguments, 0)

1

A volte è preferibile mantenere un po 'di tempo variabile di monitoraggio in un formato di data oggetto piuttosto che solo come un numero di millisecondi, per avere accesso ai metodi di Data senza re-istanziare. In tal caso, Date.now() vince ancora su new Date() o simili, anche se solo di circa il 20% sul mio Chrome e di una piccola quantità su IE.

per chi se ne frega, Date.now() non funziona nelle versioni di Internet Explorer prima di IE9 Vedi il mio JSPERF su

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

vs.

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

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