Esiste un'alternativa in JavaScript per ottenere tempo in millisecondi usando l'oggetto date, o almeno un modo per riutilizzare quell'oggetto, senza dover creare un'istanza di un nuovo oggetto ogni volta che devo ottenere questo valore? Lo sto chiedendo perché sto cercando di creare un semplice motore di gioco in JavaScript e, nel calcolare il "delta frame time", devo creare un nuovo oggetto Date ogni frame. Sebbene non sia troppo preoccupato per le implicazioni in termini di prestazioni di ciò, sto riscontrando alcuni problemi con l'affidabilità dell'ora esatta restituita da questo oggetto.
Ho qualche strano "salto" nell'animazione, all'incirca ogni secondo, e non sono sicuro che questo sia correlato alla Garbage Collection di JavaScript o ad una limitazione dell'oggetto Date quando si aggiorna così velocemente. Se imposto il valore delta su una costante, l'animazione è perfettamente fluida, quindi sono abbastanza sicuro che questo "salto" sia correlato al modo in cui ottengo il tempo.
L'unico codice rilevante che posso fornire è il modo in cui calcolo il delta time:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Nel calcolare il movimento / animazione moltiplico un valore costante per il delta time.
Se non c'è modo di evitare di ottenere il tempo in millisecondi usando l'oggetto Date, sarebbe una funzione che incrementa una variabile (essendo il tempo trascorso in millisecondi dall'inizio del gioco) e che viene chiamata usando la funzione SetTimer ad un tasso di una volta ogni millisecondi è un'alternativa efficiente e affidabile?
Modifica: ora ho testato il mio codice in diversi browser e sembra che questo "salto" sia davvero evidente solo in Chrome, non in Firefox. Ma sarebbe comunque bello se esistesse un metodo che funzionasse in entrambi i browser.
Date.getMillisecondsrestituisce solo i millisecondi nel secondo attuale, cioè da 0 a 999? Non stai usando questa funzione nel tuo esempio, ma forse viene usata da qualche altra parte o su un ramo diverso?