Skip to content

Felps03/performance

Repository files navigation

🚀 JavaScript Performance Studies

CI Node License: ISC

Laboratório educacional para estudar performance em JavaScript e entender como diferentes implementações se comportam no Node.js/V8.

O projeto reúne pequenos benchmarks de operações comuns, como loops, transformação de arrays, conversão de valores, expressões regulares e execução assíncrona. Todos usam o mesmo runner, possuem testes funcionais e geram métricas comparáveis no terminal e em JSON.

Este projeto existe somente para estudo e experimentação. Os resultados não são recomendações para código de produção e não demonstram que uma abordagem será sempre mais rápida. Hardware, sistema operacional, versão do Node, carga da máquina, formato dos dados e contexto da aplicação alteram os resultados.

O que é medido

# Estudo Arquivo
1 Remoção de propriedades com forEach, for...of e map benchmarks/01-map-vs-foreach.js
2 Lodash isEmpty vs objeto nativo benchmarks/02-is-empty-object.js
3 Date.now() vs new Date().getTime() vs +new Date benchmarks/03-date-now-vs-gettime-vs-unary-plus.js
4 String() vs .toString() vs template literal benchmarks/04-string-vs-tostring-vs-template-literal.js
5 !!value vs .length > 0 benchmarks/05-boolean-vs-double-negation.js
6 for assíncrono vs Promise.all benchmarks/06-async-for-vs-promise-all.js
7 Lodash uniqBy vs array nativo benchmarks/07-uniqby-vs-native-array.js
8 RegExp pré-compilada vs inline benchmarks/08-regexp-precompiled-vs-inline.js
9 for, forEach, for...of e map benchmarks/09-for-vs-foreach-vs-forof-vs-map.js
10 Array.from().map vs Array.prototype.map.call benchmarks/10-array-from-map-vs-map-call.js
11 reduce vs for vs forEach benchmarks/11-reduce-vs-for-vs-foreach.js
12 Loops com concatenação benchmarks/12-loops.js

Alguns estudos incluem casos propositalmente incorretos ou abordagens com diferenças semânticas. Eles permanecem identificados no código e nos testes para demonstrar por que comparar apenas o tempo pode levar a conclusões erradas.

Como executar

O projeto usa Node.js 24, definido em .nvmrc e em engines.node.

nvm install
nvm use
npm install
npm run benchmark

Para executar somente um estudo:

node benchmarks/03-date-now-vs-gettime-vs-unary-plus.js

Cada execução completa também salva um arquivo results/benchmark-<data>.json com:

  • data e duração da execução;
  • versões do Node.js e V8;
  • sistema operacional, arquitetura, CPU e memória;
  • métricas e vencedor de cada estudo.

Como interpretar

O runner usa performance.now() de node:perf_hooks, faz warm-up e mede várias iterações distribuídas em amostras. A tabela é ordenada do menor para o maior tempo médio.

  • Média/op: tempo médio de uma operação;
  • Mediana: valor central das amostras;
  • Mínimo/Máximo: extremos observados;
  • Ops/s: estimativa de operações por segundo;
  • Vs mais rápido: multiplicador em relação ao vencedor; 2.00x significa o dobro do tempo.

O troféu indica apenas o vencedor daquela execução. Antes de otimizar código real, use um profiler no cenário da aplicação e considere semântica, legibilidade e manutenção.

Estrutura

benchmarks/  estudos executáveis
scripts/     execução agregada e histórico
src/         runner e cálculos estatísticos
test/        testes com node:test
results/     históricos em JSON
docs/        material original de apoio

Desenvolvimento

npm test
npm run lint
npm run format:check

O exemplo mínimo de uso do runner está em src/runner-demo.js. Para adicionar ou alterar estudos, consulte o guia de contribuição.

Licença

Distribuído sob a licença ISC.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors