¿Existe una alternativa en JavaScript para obtener tiempo en milisegundos usando el objeto de fecha, o al menos una forma de reutilizar ese objeto, sin tener que crear una instancia de un nuevo objeto cada vez que necesito obtener este valor? Pregunto esto porque estoy tratando de hacer un motor de juego simple en JavaScript, y al calcular el "tiempo de fotograma delta", tengo que crear un nuevo objeto Date en cada fotograma. Si bien no estoy demasiado preocupado por las implicaciones de rendimiento de esto, estoy teniendo algunos problemas con la confiabilidad del tiempo exacto devuelto por este objeto.
Recibo algunos "saltos" extraños en la animación, cada segundo más o menos, y no estoy seguro de si esto está relacionado con la Recolección de Basura de JavaScript o una limitación del objeto Fecha cuando se actualiza tan rápido. Si establezco el valor delta en alguna constante, entonces la animación es perfectamente fluida, así que estoy bastante seguro de que este "salto" está relacionado con la forma en que obtengo el tiempo.
El único código relevante que puedo dar es la forma en que calculo el tiempo delta:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Al calcular el movimiento / animación, multiplico un valor constante con el tiempo delta.
Si no hay forma de evitar obtener el tiempo en milisegundos usando el objeto Fecha, sería una función que incremente una variable (que es el tiempo transcurrido en milisegundos desde que comenzó el juego), y que se llama usando la función SetTimer a una velocidad de una vez cada milisegundo sea una alternativa eficiente y confiable?
Editar: he probado mi código ahora en diferentes navegadores y parece que este "salto" en realidad solo es aparente en Chrome, no en Firefox. Pero aún sería bueno si hubiera un método que funcionara en ambos navegadores.
fuente
Date.getMilliseconds
solo devuelve los milisegundos en el segundo actual, es decir, de 0 a 999? No está utilizando esta función en su ejemplo, pero ¿tal vez se está utilizando en otro lugar o en una rama diferente?