Existe uma alternativa no JavaScript de obter tempo em milissegundos usando o objeto de data ou pelo menos uma maneira de reutilizá-lo, sem ter que instanciar um novo objeto toda vez que eu precisar obter esse valor? Estou perguntando isso porque estou tentando criar um mecanismo de jogo simples em JavaScript e, ao calcular o "tempo de quadro delta", tenho que criar um novo objeto Date a cada quadro. Embora não esteja muito preocupado com as implicações de desempenho disso, estou tendo alguns problemas com a confiabilidade do tempo exato retornado por esse objeto.
Eu recebo alguns "pulos" estranhos na animação, a cada segundo ou mais, e não tenho certeza se isso está relacionado à Coleta de Lixo do JavaScript ou a uma limitação do objeto Date ao atualizar tão rápido. Se eu definir o valor delta como uma constante, a animação será perfeitamente suave, por isso tenho certeza de que esse "salto" está relacionado à maneira como ganho o tempo.
O único código relevante que posso fornecer é a maneira como calculo o tempo delta:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Ao calcular movimento / animação, multiplico um valor constante pelo tempo delta.
Se não há como evitar o tempo em milissegundos usando o objeto Date, uma função que incrementa uma variável (sendo o tempo decorrido em milissegundos desde o início do jogo) e é chamada usando a função SetTimer a uma taxa de uma vez a cada milissegundo ser uma alternativa eficiente e confiável?
Edit: Eu testei agora meu código em diferentes navegadores e parece que esse "salto" é realmente aparente apenas no Chrome, não no Firefox. Mas ainda seria bom se houvesse um método que funcionasse nos dois navegadores.
Date.getMillisecondsretornar apenas os milissegundos no segundo atual, ou seja, de 0 a 999? Você não está usando esta função no seu exemplo, mas talvez ela esteja sendo usada em outro lugar ou em uma ramificação diferente?