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

por MDNRendimiento - Date.now() vs date.getTime()

vs

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

por MDN.

¿Hay alguna diferencia entre los dos, además de la sintaxis y la capacidad de establecer la fecha (a no la actual) a través de opcional en la segunda versión?

Date.now() es más rápido - echa un vistazo a la jsperf

+34

para cualquier persona que se preocupa, Date.now() no funciona en versiones de Internet Explorer antes de IE9. A mí no me importa –

+8

Por lo que vale, puedes agregar la compatibilidad con la cuña mencionada en https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now para hacer Date.now() trabajo en IE <9, también. – jrajav

+0

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

Respuesta

2

Sí, eso es correcto; son efectivamente equivalentes cuando se usa la hora actual.

60

Estas cosas son las mismas (edición semánticamente, el rendimiento es un poco mejor con .now()):

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

Sin embargo, el valor de tiempo de cualquier ya creado Date ejemplo, se congela en el momento de su construcción (o en cualquier momento/fecha en que se haya configurado). Es decir, si usted hace esto:

var now = new Date(); 

y luego esperar un tiempo, una llamada posterior a now.getTime() le dirá el tiempo en el punto se ha establecido la variable.

+6

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

+9

ahora() es más rápido. –

+0

¿Cree que sería más eficaz crear un objeto de fecha en el comienzo del programa y luego simplemente actualizar ese objeto de fecha ('dateObj.setTime (Date.now())') o crear nuevos objetos de fecha cada vez que lo haga algo asincrónico que necesita acceder a los métodos 'Date' (como' dateObj.getMinutes() ') – Taurus

31

Son efectivamente equivalentes, pero debe usar Date.now(). Es más claro y aproximadamente el doble de rápido.

Editar: Fuente: http://jsperf.com/date-now-vs-new-date

+0

¿Esto se debe a que 'Fecha (opcional) .getTime();' tiene que asignar espacio para obtener un nuevo objeto Date antes de obtener la hora actual? –

+0

Probablemente, sí. Sin embargo, esperaría que tenga más que ver con todo lo que está haciendo el constructor de Date que con la asignación real del objeto. – jrajav

+0

Sí, lo agregué con entusiasmo: quise decir la asignación y todo lo que conlleva la creación de un objeto. –

3

Al hacer (new Date()).getTime() va a crear un nuevo objeto Date. Si hace esto varias veces, será aproximadamente 2 veces más lento que Date.now()

El mismo principio debe aplicarse para Array.prototype.slice.call(arguments, 0) vs [].slice.call(arguments, 0)

1

A veces es preferible mantener un tiempo variable de seguimiento en un formato de fecha objeto en vez que solo como un número de milisegundos, para tener acceso a los métodos de Date sin volver a crear instancias. En ese caso, Date.now() aún gana sobre Date() nuevo o similar, aunque solo en un 20% en mi Chrome y en una pequeña cantidad en IE.

Ver mi JSPERF en

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

vs

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

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