var timeInMs = Date.now();
por MDN
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 (que no sea la actual) a través de opcional en la segunda versión?
Date.now () es más rápido: echa un vistazo al jsperf
Respuestas:
Estas cosas son las mismas ( editar semánticamente; el rendimiento es un poco mejor con
.now()
):Sin embargo, el valor de tiempo de cualquier
Date
instancia ya creada se congela en el momento de su construcción (o en cualquier fecha / hora en la que se haya configurado). Es decir, si haces esto:y luego espere un momento, una llamada posterior a
now.getTime()
le dirá la hora en el punto en que se estableció la variable.fuente
dateObj.setTime(Date.now())
) o crear nuevos objetos de fecha cada vez que haces algo asincrónico que necesita acceder aDate
métodos (comodateObj.getMinutes()
)?Son efectivamente equivalentes, pero debes usar
Date.now()
. Es más claro y aproximadamente el doble de rápido.Editar: Fuente: http://jsperf.com/date-now-vs-new-date
fuente
Date(optional).getTime();
tiene que asignar espacio para obtener un nuevo objeto Date antes de obtener la hora actual?Cuando lo hace
(new Date()).getTime()
, está creando un nuevo objeto Date. Si hace esto repetidamente, será aproximadamente 2 veces más lento que Date.now ()El mismo principio debería aplicarse para
Array.prototype.slice.call(arguments, 0)
vs[].slice.call(arguments, 0)
fuente
Si, eso es correcto; son efectivamente equivalentes cuando se usa la hora actual.
fuente
A veces es preferible mantener alguna variable de seguimiento de tiempo en un formato de objeto Date en lugar de solo una cantidad de milisegundos, para tener acceso a los métodos de Date sin volver a crear instancias. En ese caso, Date.now () todavía gana sobre el nuevo Date () o similar, aunque solo en aproximadamente un 20% en mi Chrome y en una pequeña cantidad en IE.
Ver mi JSPERF en
vs.
http://jsperf.com/new-date-vs-settime
fuente