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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top