microtime()
A função PHP microtime() retorna o tempo atual em segundos desde a época Unix com precisão de microssegundos, ideal para medir o desempenho do código.
Introdução
Quando se trata de desenvolvimento web, o tempo é fundamental. A função PHP microtime() é uma ferramenta poderosa que os desenvolvedores usam para medir o desempenho do seu código. Esta função retorna o tempo atual em segundos desde a época Unix com precisão de microssegundos, tornando-se uma forma confiável de medir o tempo decorrido entre dois pontos no seu código. Neste artigo, vamos aprofundar as particularidades desta função e mostrar como usá-la para melhorar o desempenho das suas aplicações web.
O que é microtime()?
A função microtime() retorna o tempo atual em segundos desde a época Unix (1 de janeiro de 1970, 00:00:00 UTC) com precisão de microssegundos. A função padrão time() fornece apenas segundos inteiros, portanto quando você precisa medir algo que termina em uma fração de segundo — como uma consulta ao banco de dados ou um loop — microtime() é o que você utiliza.
Por padrão, microtime() retorna uma string no formato "msec sec" — uma parte fracionária (os microssegundos como decimal) seguida de um espaço e o timestamp Unix em segundos inteiros:
echo microtime();
// Output: "0.45678900 1698765432"
// ^ fraction ^ whole secondsLer essa string é inconveniente, então na prática você quase sempre passa true para obter um único número de ponto flutuante com o qual pode fazer aritmética diretamente:
echo microtime(true);
// Output: 1698765432.456789Sintaxe
microtime(bool $get_as_float = false): string|floatDisponível desde PHP 4.0.0. A função aceita um parâmetro boolean opcional:
$get_as_float— quandotrue, retorna umfloatda formaseconds.microseconds. Quandofalse(o padrão), retorna a string"msec sec"descrita acima.
Se você precisar do timestamp a partir da forma de string padrão, divida-o no espaço e some as duas partes:
[$micro, $sec] = explode(' ', microtime());
$timestamp = (float) $sec + (float) $micro; // same as microtime(true)Uso
O principal uso de microtime() é o benchmarking: registre microtime(true) antes de um bloco de código, registre novamente depois e subtraia. A diferença é o tempo decorrido em segundos. Isso permite comparar duas abordagens, encontrar pontos lentos e verificar se uma otimização realmente ajudou.
Um segundo uso comum é a criação de identificadores baseados em timestamp. O valor float muda em cada chamada, então você pode incorporá-lo em um ID. Esteja ciente, porém, de que duas chamadas no mesmo microssegundo retornam o mesmo valor, e os floats armazenam apenas ~15 dígitos significativos — portanto microtime() sozinho não é à prova de colisões. Para IDs verdadeiramente únicos, use a função dedicada uniqid() (que já incorpora microtime), opcionalmente com uniqid('', true) para entropia adicional.
microtime() vs hrtime()
microtime() reporta o relógio do sistema, que pode recuar (ajustes de NTP, mudanças de horário de verão) e produzir uma medição negativa ou distorcida. Para medições de duração pura no PHP 7.3+, prefira hrtime(): ele usa um timer monotônico de alta resolução que nunca retrocede e retorna nanossegundos. Use microtime() quando precisar de um ponto real no tempo vinculado à época Unix; use hrtime() quando se importar apenas com quanto tempo algo levou.
Exemplos
Medindo o tempo de execução do script
O padrão clássico: capture o início, execute seu código, capture o fim, subtraia.
Este exemplo mede o tempo que um bloco de código leva e exibe o resultado em segundos.
Benchmarking de trabalho real
Para obter um número que você possa realmente ler e comparar, execute a operação muitas vezes e formate o resultado. Aqui medimos 100.000 concatenações de strings e imprimimos o tempo decorrido em milissegundos:
<?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 msnumber_format() arredonda o float para duas casas decimais para que a saída fique organizada. Consulte number_format() para as opções completas de formatação.
Um identificador baseado em timestamp
Você pode derivar um ID do float, mas faça um hash (ou use-o como semente) em vez de expor o valor bruto:
Misturar random_int() elimina o risco de dois IDs colidirem quando gerados no mesmo microssegundo. Para a maioria das aplicações, a função integrada uniqid() é a escolha mais simples e específica para este fim.
Conclusão
A função microtime() é uma ferramenta essencial para medir o tempo decorrido em PHP. Capture-a antes e depois de um bloco de código, subtraia e você terá uma duração precisa. Lembre-se apenas que ela rastreia o relógio do sistema — para medições de duração pura no PHP 7.3+, use hrtime(), e para timestamps em segundos inteiros use time().