Benchmarking honesto
Spec: ISO/IEC 25010 ISO/IEC 25010 Spec: ISO/IEC 17025 ISO/IEC 17025 Evidence: Benchmark-backed
Visão geral
Seção intitulada “Visão geral”Um número de benchmark sem o método diz muito pouco. “O NextPDF renderiza um documento em N milissegundos” não diz muita coisa para você, a menos que você conheça o documento, o hardware, o número de execuções e a variância. Esta página explica como o NextPDF mede desempenho, por que reporta um sinal controlado em vez de um número de destaque e por que não publica nenhum número de velocidade.
Por que isso importa
Seção intitulada “Por que isso importa”Afirmações de desempenho são fáceis de publicar e fáceis de falsear, muitas vezes por acidente. Uma única execução aquecida em um laptop ocioso, o resultado mais rápido entre dez tentativas ou um microbenchmark de uma função que ninguém chama em um caminho crítico podem produzir um número real que não prevê nada para a carga de trabalho. Spec: ISO/IEC 25010 ISO/IEC 25010 define eficiência de desempenho como executar funções dentro de parâmetros de tempo e de vazão sob condições especificadas (ISO/IEC 25010, §3.10). Remova “sob condições especificadas” e o número deixa de ser uma medição. Ele se torna um valor sem sentido.
Há também uma falha mais silenciosa: um número que já foi verdadeiro um dia. No instante em que você coloca um resultado de benchmark em um texto, ele fica congelado. Enquanto isso, o código, o runtime e o hardware continuam mudando. Uma afirmação desatualizada de “rápido” não é apenas inútil. Ela está errada, e está errada sem avisar.
A versão resumida
Seção intitulada “A versão resumida”- Um número de desempenho não significa nada sem o método: a entrada, o ambiente, o número de execuções, a política de aquecimento e a dispersão.
- O NextPDF mede com execuções repetidas, descarta as iterações de aquecimento e reporta uma distribuição, não um único valor de melhor caso.
- A detecção de regressões é estatística: um resultado é avaliado em relação a uma baseline com o teste t de Welch, de modo que uma mudança precisa ser ao mesmo tempo estatisticamente significativa e grande o bastante para importar antes de contar como uma regressão.
- Um ambiente instável é detectado e reportado, e não diluído silenciosamente em uma média — a alta variância entre execuções invalida o resultado em vez de se esconder na média.
- O desempenho é publicado como um sinal vivo gerado junto com a build, nunca como um número de destaque congelado — e é por isso que nenhum valor em milissegundos aparece nesta página.
Como o NextPDF aborda isso
Seção intitulada “Como o NextPDF aborda isso”O gate de desempenho do mecanismo é um teste estatístico, não uma única execução cronometrada. A metodologia documentada executa a suíte sob medição muitas vezes, descarta um número configurado de execuções de aquecimento e calcula a média, o desvio padrão e o coeficiente de variação tanto para a duração quanto para a memória. Em seguida, compara o resultado atual com uma baseline versionada:
- Repeat Run the measured suite N times under fixed conditions.
- Discard warmup Drop the first W runs so cold-start noise is excluded.
- Summarise Compute mean, standard deviation, and coefficient of variation for duration and memory.
- Test vs baseline Welch's t-test (two-sample, unequal variance) against the committed baseline.
- Decide Significant AND effect over threshold → regression. Variance over threshold → unreliable, not a pass. Absolute ceiling breach → hard fail.
Três propriedades mantêm o processo honesto. Primeiro, uma regressão precisa de duas coisas ao mesmo tempo: significância estatística (é improvável que a diferença seja ruído) e um tamanho de efeito acima de um limiar (a diferença é grande o bastante para importar). Uma desaceleração real, mas minúscula, não dispara um alarme falso. Uma desaceleração grande em dados ruidosos não passa despercebida. Segundo, a instabilidade é um veredito: quando a variação entre execuções ultrapassa um limite, o gate reporta o ambiente como não confiável. Ele não dilui o ruído em uma média sem significado nem a trata como aprovação. Terceiro, ainda existe um teto absoluto — um limite superior rígido que reprova a build independentemente das estatísticas. Por causa dele, “nenhuma regressão significativa” nunca pode justificar um resultado que já é lento demais.
Essa é a disciplina de medição que a ISO/IEC 17025 descreve para qualquer métrica confiável: resultados obtidos sob condições predeterminadas — repetibilidade dentro de um mesmo ambiente (ISO/IEC 17025, §3.7) e reprodutibilidade entre ambientes (ISO/IEC 17025, §3.5). Um valor de desempenho do NextPDF só tem significado como “este método, esta baseline, esta execução”. É exatamente por isso que ele fica na build que o produziu, não em uma frase aqui.
O que as evidências dizem
Seção intitulada “O que as evidências dizem”Evidence: Benchmark-backed O gate de benchmark do mecanismo implementa medições repetidas com descarte de aquecimento, sumarização por média / desvio padrão / coeficiente de variação e um teste t de Welch de duas amostras em relação a uma baseline versionada, com resultados explícitos de aprovado / regressão / instável / teto rígido. Os benchmarks de desempenho também existem como uma suíte dedicada, executável separadamente, além de um harness PHPBench. O desempenho é medido de forma deliberada, não estimado.
Evidence: Standard-backed “Sob condições especificadas” não é cautela editorial. É a definição. Spec: ISO/IEC 25010, §3.10 ISO/IEC 25010 §3.10 vincula a eficiência de desempenho a condições especificadas de tempo, vazão e recursos. Um número sem as suas condições não é uma medição mais fraca. Não é uma medição.
Evidence: Standard-backed A abordagem para repetibilidade e reprodutibilidade segue a Spec: ISO/IEC 17025 ISO/IEC 17025 : um resultado só é confiável em relação a condições predeterminadas, distinguindo a repetibilidade no mesmo ambiente da reprodutibilidade entre ambientes. Um benchmark que não consegue declarar as próprias condições não pode reivindicar nenhuma das duas.
Exemplo prático
Seção intitulada “Exemplo prático”Na prática, “honesto” tem a forma de uma declaração de método, não de um valor:
<?php
declare(strict_types=1);
// The gate is invoked with its conditions made explicit, e.g.://// php ci/scripts/benchmark-gate.php \// --runs=5 --warmup=1 --testsuite=Unit \// --baseline=<committed-baseline>//// It then reports, for duration AND memory:// - mean, standard deviation, coefficient of variation (the spread)// - Welch's t-test p-value and effect size vs the baseline// - a verdict: PASS | REGRESSION | UNSTABLE | hard-ceiling FAIL//// An honest performance statement is therefore shaped like:// "<suite>, <runs> runs (<warmup> warmup), <hardware/runtime>,// no statistically significant regression vs baseline <id>;// coefficient of variation within bound."//// It is NEVER shaped like:// "NextPDF is fast" — or a bare millisecond number with no method.O entregável de um benchmark é o método reproduzível e o veredito. O valor bruto em milissegundos pertence à build que o produziu, onde você pode obtê-lo de novo — não a uma documentação em que você não pode.
Equívoco comum
Seção intitulada “Equívoco comum”O primeiro equívoco é achar que um benchmark é um número. Um benchmark é um procedimento que produz uma distribuição. O número é apenas uma amostra dessa distribuição. Reportar o melhor entre várias execuções, ou uma única execução aquecida, não é otimismo. É medir outra coisa (o pico sob condições ideais) e rotulá-la como desempenho típico.
O segundo é achar que “nenhuma regressão estatisticamente significativa” significa “tão rápido quanto antes, garantido”. Significa que a diferença observada está dentro daquilo que o método consegue distinguir do ruído, dado este número de execuções e esta variância. Essa é uma afirmação limitada e condicional. É precisamente por isso que o NextPDF mantém o teto absoluto como uma salvaguarda independente e se recusa a comprimir o resultado em uma afirmação sem qualificação — seja em benefício próprio, seja contra qualquer outra pessoa.
Limites e fronteiras
Seção intitulada “Limites e fronteiras”Esta página descreve como o NextPDF mede e reporta desempenho. Ela não declara nenhum valor de vazão, latência ou memória, de propósito. Esses são sinais vivos gerados a partir de artefatos de integração contínua sob condições declaradas, e os valores atuais são publicados junto com a build. Um número repetido aqui perderia as condições associadas e ficaria desatualizado — exatamente a falha contra a qual esta página argumenta. Não existe nenhuma constante de desempenho estável a citar, então nenhuma é citada. A disciplina é o entregável.
O número de execuções, a política de aquecimento, os limiares e a baseline pertencem à configuração de benchmark do mecanismo e evoluem junto com o mecanismo e o seu hardware. Essa configuração é a autoridade se algum dia divergir desta explicação. O NextPDF não faz nenhuma comparação de desempenho com qualquer outra biblioteca — favorável ou desfavorável — porque uma comparação assim, sem condições idênticas e declaradas, seria exatamente a afirmação sem qualificação que esta página existe para recusar.
Documentação relacionada
Seção intitulada “Documentação relacionada”- Testes de golden file — a mesma disciplina de reprodutibilidade aplicada à correção da saída, incluindo os perfis bitwise / estrutural / semântico.
- A pirâmide de testes do NextPDF — onde se encaixa o nível de desempenho e por que ele é opcional, em vez de rodar a cada mudança.
- Teste de mutação, explicado — outro lugar em que o NextPDF reporta um sinal controlado em vez de um número de vaidade.
Glossário
Seção intitulada “Glossário”- Benchmark — um procedimento definido que produz uma distribuição de medições sob condições declaradas, não um único número.
- Execução de aquecimento — uma iteração inicial descartada para que os efeitos de partida a frio (JIT, caches, autoload) não contaminem o resultado medido.
- Coeficiente de variação — o desvio padrão dividido pela média; uma medida de dispersão sem unidade usada para avaliar se uma execução é estável o suficiente para ser confiável.
- Teste t de Welch — um teste estatístico de duas amostras para variâncias desiguais, usado aqui para decidir se um resultado difere da baseline além do ruído.
- Tamanho de efeito — quão grande é uma diferença, independentemente da significância estatística; o NextPDF exige ambos antes de declarar uma regressão.
- Repetibilidade / reprodutibilidade — a concordância dos resultados sob condições predeterminadas dentro de um mesmo ambiente (repetibilidade) ou entre ambientes (reprodutibilidade), conforme a ISO/IEC 17025.
- Teto absoluto — um limite superior rígido que reprova a build independentemente da comparação estatística.