Medição Precisa de Performance em JavaScript com performance.now() e console.time()
Medir o tempo de execução de blocos de código é essencial para identificar gargalos de desempenho e otimizar rotinas críticas na aplicação. O uso de performance.now() e console.time() resolve essa necessidade ao fornecer métricas com precisão de milissegundos sem a imprecisão do objeto tradicional Date.now().
JavaScript
/**
* Mede o tempo de execução de uma função utilizando performance.now()
* @param {Function} fn - Função a ser testada.
* @returns {any} O resultado retornado pela função original.
*/
function medirDesempenho(fn) {
// Captura o timestamp de alta precisão inicial
const inicio = performance.now();
const resultado = fn();
// Captura o timestamp final e calcula a diferença
const fim = performance.now();
const duracao = (fim - inicio).toFixed(4);
console.log(`[performance.now] Execução concluída em: ${duracao} ms`);
return resultado;
}
// --- Exemplo Prático 1: Uso com performance.now() ---
const operacaoPesada = () => {
let soma = 0;
for (let i = 0; i < 1e7; i++) {
soma += i;
}
return soma;
};
medirDesempenho(operacaoPesada);
// --- Exemplo Prático 2: Uso nativo com console.time() ---
console.time('Timer do Loop'); // Inicia o temporizador rotulado
let acumulador = 0;
for (let i = 0; i < 1e7; i++) {
acumulador += i;
}
console.timeEnd('Timer do Loop'); // Encerra o temporizador e exibe o tempo no console
Pontos-chave
- Alta Precisão (Sub-milissegundos): O
performance.now()mede a duração com precisão de microssegundos (fração de milissegundos), ao contrário deDate.now(), que depende do relógio do sistema. - Praticidade do
console.time(): Ideal para depurações rápidas no ambiente de desenvolvimento, necessitando apenas de um identificador idêntico entreconsole.time('label')econsole.timeEnd('label'). - Desempenho Relativo ao Hardware: Os resultados de tempo variam conforme a carga da CPU e a máquina executora; para testes estatísticos rigorosos em produção, considere a API
PerformanceObserver. - Suporte Universal: Ambas as abordagens são nativas e amplamente suportadas tanto no ecossistema Node.js quanto em todos os navegadores modernos.
