Tempi in JavaScript
-
10-07-2019 - |
Domanda
Sto testando rapidamente alcuni programmi JavaScript creando un oggetto Date e utilizzandolo per ottenere il tempo in millisecondi prima e dopo il vero lavoro della funzione. Ho reso il corpo una semplice aggiunta per il ciclo, e quindi la fine è sottrarre il vecchio ms dal nuovo ms e stamparlo. Tuttavia, tutto termina in 0 millisecondi ... il che ha senso perché il tempo in cui lo controllo con una scrittura è lo stesso prima e dopo il lavoro. Lo sto facendo bene e JavaScript (in Chrome) è velocissimo o c'è qualcosa dietro le quinte che sta rovinando le mie variabili.
Soluzione
Mentre l'oggetto Date restituisce i tempi in millisecondi, questa non è in realtà la risoluzione del timer dietro di esso. Ad esempio, il timer potrebbe spuntare una volta ogni 10 ms. Se il processo richiede solo 3 ms, la maggior parte delle volte non vedrai una misurazione diversa da zero (e talvolta vedrai 10 ms).
La soluzione è eseguire la tua funzione più volte e tutto il tempo. Ad esempio, eseguilo un milione di volte e dividi il tempo totale per 1000000 per ottenere il tempo medio di una corsa.
Altri suggerimenti
Vedi il mio rispondi a questa domanda su come implementare alcuni semplici confronti comparativi. Come ha sottolineato @Greg Hewgill, è importante eseguire il test più volte per ottenere una rappresentazione accurata della durata effettiva di un test specifico.
In genere, si riduce a qualcosa di semplice come:
var MAX = 100000, i = 0,
s = null, e = null;
console.info("`someMethodToTest()` over %d iterations", MAX);
s = new Date();
do {
someMethodToTest();
} while ( ++i < MAX );
e = new Date();
console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);
Dovremmo davvero vedere il tuo codice. Qualunque sia, una possibile ragione per lo zero è che il tuo loop sta funzionando in modo asincrono: l'interprete non aspetta la fine del loop prima di saltare alla prossima istruzione. O, naturalmente, il tuo loop può essere velocissimo.
A proposito, potresti essere interessato all'utilizzo di un profiler JavaScript. Firebug per Firefox è bello. Devi solo aprire la console e premere Profilo .