Michele Nasti

Thoughts on what I learn

loggare il tempo di esecuzione di un JS : console.time e console.timeEnd

Ogni browser moderno dispone di avanzatissimi strumenti di sviluppo, Firefox è stato il primo con Firebug (ora integra un suo strumento interno) mentre Chrome ha dettato lo standard con Chrome Developer Tools. A seguire tutti i browser che volevano definirsi moderni hanno dovuto creare delle conosole di sviluppo "serie", e supportare tutta una serie di costrutti Javascript per facilitare lo sviluppo e il debugging di queste applicazioni.

Se leggete questo blog significa che sapete aprire una di queste console e probabilmente lo fate ogni giorno per lavoro. Ma come misurare che il codice JS che stiamo scrivendo sia effettivamente veloce? O meglio, come valutarlo in relazione ad altre soluzioni alternative?

un tool estremamente utile è console.time() . Tutto il codice racchiuso tra console.time() e console.timeEnd() viene misurato in console. Per identificare il blocco di codice valutato possiamo (e secondo me dobbiamo) dare una stringa come label. Vediamo un esempio:

console.time("test del for"); 

var i, arr = [];
for(i=0; i<100000; i++) {
arr.unshift(i);
}
arr.sort();

console.timeEnd("test del for");

Nel caso precedente creiamo un array di 100.000 posizioni, e inseriamo ogni nuovo elemento all'inizio. Dunque gli elementi sono disposti in odine decrescente. Poi lo ordiniamo con sort(). In console leggiamo: test del for: 1041.271ms .

Vediamo una variante che ci aspettiamo più semplice:

console.time("test del for"); 

var i, arr = [];
for(i=0; i<100000; i++) {
arr[i]=i
}
arr.sort();

console.timeEnd("test del for");

In questo altro caso invece creiamo l'array inserendo gli elementi nell'ordine naturale. Dopo l'operazione di ordinamento viene loggato test del for: 187.685ms .

Cosa abbiamo dunque scoperto? che conviene ordinare array già ordinati 🙂 e che console.time(LABEL) e console.timeEnd(LABEL) sono una comoda funzione per verificare quanto tempo viene impiegato dal nostro codice javascript.

Esercizio per casa: conviene usare document.getElementById("body").**createElement() o document.getElementById("body").innerHtml()? A voi la scoperta!