Ambiente de referência
- Sistema
- Windows x64
- CPU
- 12 processadores lógicos
- RAM
- 32 GiB
- Chromium
- 151.0.7922.34
- Viewport
- 1440x900
( Dados próprios )
Quanto tempo o fluxo levou em uma máquina de referência, com a mesma imagem e três repetições por lote. Os números são evidência de um teste, não promessa de velocidade.
Medições feitas em . Cada valor principal é a mediana de três execuções.
| Imagens | Megapixels totais | Upload | Ajuste automático | Exportação PNG |
|---|---|---|---|---|
| 1 | 1.0 MP | 836 ms | 137 ms | 393 ms |
| 10 | 9.6 MP | 824 ms | 864 ms | 1,46 s |
| 25 | 24.0 MP | 836 ms | 10,55 s | 2,51 s |
O cronômetro do upload termina quando todas as miniaturas e a prévia central ficam visíveis. O ajuste termina quando o resumo do lote aparece. A exportação termina quando a página de download publica o resumo de concluídos e falhas.
Cada amostra abre um contexto isolado, carrega cópias da fixture própria de 1200×800 px (0,96 MP), seleciona o lote, executa Ajuste Automático e exporta PNG.
npm run dev -- --port 3218
npm run benchmark:batchAo editar fotos em lote localmente no navegador, o gargalo principal não é a largura de banda da rede nem a velocidade do disco, mas a memória de mapa de bits descompactada na memória RAM. Quando um arquivo JPEG ou PNG de 500 KB é aberto, o navegador o decodifica em uma matriz bruta de pixels RGBA de 32 bits (ImageData). Cada pixel consome exatamente 4 bytes (Vermelho, Verde, Azul e Alfa). Uma única imagem de 1200×800 px requer aproximadamente 3,84 MB de memória bruta; isso significa que um lote de 25 fotos retém quase 96 MB de dados de pixel na aba do navegador simultaneamente.
Durante o ajuste automático, o processamento ocorre em um Web Worker em segundo plano. Esse worker calcula estatísticas de tom, histogramas de luminância e balanço de cores sem travar a interface da página. Note como o tempo de ajuste escala de forma sublinear entre 10 e 25 imagens: os motores JavaScript JIT modernos (como o V8 no Chromium) otimizam loops e rotas frequentes após o aquecimento inicial, permitindo que imagens consecutivas sejam ajustadas com alta eficiência.
A exportação PNG é consistentemente a etapa mais exigente, pois a codificação de buffers RGBA não compactados em blocos PNG com filtragem de linhas e compressão deflate exige ciclos intensivos de CPU e cálculo de somas de verificação. Quando todas as saídas terminam, a biblioteca JSZip empacota os arquivos em um único arquivo ZIP na memória antes de disparar o download nativo do navegador.