W3docs

microtime()

La funzione PHP microtime() restituisce il tempo corrente con precisione al microsecondo, utile per misurare le prestazioni del codice.

Introduzione

Nello sviluppo web, il tempo è tutto. La funzione PHP microtime() è uno strumento potente che gli sviluppatori utilizzano per misurare le prestazioni del proprio codice. Questa funzione restituisce il tempo corrente in secondi dall'epoca Unix con precisione al microsecondo, rendendola un modo affidabile per misurare il tempo trascorso tra due punti del codice. In questo articolo approfondiremo le caratteristiche di questa funzione e ti mostreremo come usarla per migliorare le prestazioni delle tue applicazioni web.

Cos'è microtime()?

La funzione microtime() restituisce il tempo corrente in secondi dall'epoca Unix (1 gennaio 1970, 00:00:00 UTC) con precisione al microsecondo. La funzione standard time() fornisce solo secondi interi, quindi quando devi misurare qualcosa che termina in una frazione di secondo — come una query al database o un ciclo — microtime() è la soluzione ideale.

Per impostazione predefinita, microtime() restituisce una stringa nel formato "msec sec" — una parte frazionaria (i microsecondi come decimale) seguita da uno spazio e dal timestamp Unix in secondi interi:

echo microtime();
// Output: "0.45678900 1698765432"
//          ^ fraction   ^ whole seconds

Leggere quella stringa è scomodo, quindi in pratica si passa quasi sempre true per ottenere un singolo numero in virgola mobile su cui fare aritmetica direttamente:

echo microtime(true);
// Output: 1698765432.456789

Sintassi

microtime(bool $get_as_float = false): string|float

Disponibile a partire da PHP 4.0.0. La funzione accetta un parametro booleano opzionale:

  • $get_as_float — quando è true, restituisce un float nella forma seconds.microseconds. Quando è false (valore predefinito), restituisce la stringa "msec sec" descritta sopra.

Se hai mai bisogno del timestamp dalla forma stringa predefinita, dividi sul spazio e somma le due parti:

[$micro, $sec] = explode(' ', microtime());
$timestamp = (float) $sec + (float) $micro; // same as microtime(true)

Utilizzo

Il compito principale di microtime() è il benchmarking: registra microtime(true) prima di un blocco di codice, registralo di nuovo dopo, e sottrai. La differenza è il tempo di clock trascorso in secondi. Questo ti permette di confrontare due approcci, trovare i punti lenti e verificare che un'ottimizzazione abbia effettivamente aiutato.

Un secondo uso comune è la creazione di identificatori basati sul timestamp. Il valore float cambia ad ogni chiamata, quindi puoi incorporarlo in un ID. Tieni presente, tuttavia, che due chiamate nello stesso microsecondo restituiscono lo stesso valore, e i float contengono solo ~15 cifre significative — quindi microtime() da solo non è a prova di collisione. Per ID davvero univoci usa la funzione dedicata uniqid() (che già incorpora microtime), opzionalmente con uniqid('', true) per entropia aggiuntiva.

microtime() vs hrtime()

microtime() riporta l'orologio di sistema, che può andare indietro (aggiustamenti NTP, cambiamenti dell'ora legale) e produrre una misurazione negativa o distorta. Per misurazioni di durata pure in PHP 7.3+, preferisci hrtime(): utilizza un timer monotono ad alta risoluzione che non va mai indietro e restituisce nanosecondi. Usa microtime() quando hai bisogno di un punto effettivo nel tempo legato all'epoca Unix; usa hrtime() quando ti interessa solo quanto tempo ha impiegato qualcosa.

Esempi

Misurazione del tempo di esecuzione di uno script

Il pattern classico: cattura l'inizio, esegui il codice, cattura la fine, sottrai.

php— editable, runs on the server

Questo esempio misura il tempo impiegato da un blocco di codice e visualizza il risultato in secondi.

Benchmarking di lavoro reale

Per ottenere un numero che puoi effettivamente leggere e confrontare, esegui l'operazione molte volte e formatta il risultato. Qui cronometriamo 100.000 concatenazioni di stringhe e stampiamo il tempo trascorso in millisecondi:

<?php

$start = microtime(true);

$result = '';
for ($i = 0; $i < 100000; $i++) {
    $result .= 'x';
}

$elapsed_ms = (microtime(true) - $start) * 1000;

echo "Built a " . strlen($result) . "-char string in "
     . number_format($elapsed_ms, 2) . " ms";
// Example output: Built a 100000-char string in 4.31 ms

number_format() arrotonda il float a due decimali in modo che l'output rimanga ordinato. Consulta number_format() per le opzioni di formattazione complete.

Un identificatore basato sul timestamp

Puoi derivare un ID dal float, ma eseguine l'hash (o usalo come seme) invece di esporre il valore grezzo:

php— editable, runs on the server

Aggiungere random_int() elimina il rischio che due ID collidano quando vengono generati nello stesso microsecondo. Per la maggior parte delle applicazioni, la funzione integrata uniqid() è la scelta più semplice e costruita appositamente per questo scopo.

Conclusione

La funzione microtime() è uno strumento essenziale per misurare il tempo trascorso in PHP. Acquisiscila prima e dopo un blocco di codice, sottrai, e avrai una durata precisa. Ricorda solo che traccia l'orologio di sistema — per misurazioni di durata pure su PHP 7.3+, utilizza hrtime(), e per timestamp in secondi interi usa time().

Pratica

Pratica
Qual è la funzione di microtime() in PHP?
Qual è la funzione di microtime() in PHP?
Was this page helpful?