Como medimos o Dice Core

Cenários, metodologia, resultados e limites de uma comparação reproduzível com outras bibliotecas de dados de RPG.

A pergunta certa

Um benchmark responde a uma pergunta restrita: quantas vezes uma implementação consegue executar esta operação, neste ambiente? Ele não mede sozinho a qualidade de uma API, a cobertura de regras, a segurança da aleatoriedade nem a experiência visual. Por isso, publicamos os números de Dice Core e três bibliotecas JavaScript com as condições do teste. A aba de dados 3D compara os recursos documentados do Dice View v2/v3 com outros renderizadores e mede o payload de código do View contra o Dice Box.

O resultado merece leitura direta: Dice Core não liderou o throughput nos cinco cenários simples medidos. Ainda assim, entregou dezenas de milhares de rolagens completas por segundo no computador usado. Uma afirmação como “a biblioteca mais rápida do mundo” não seria sustentada por estes dados.

Pacotes e operações

O teste fixa versões com um package-lock.json separado em scripts/benchmarks/:

Biblioteca Versão Operação cronometrada
@erpg/dicecore 3.7.1 rollRpgDice(expressao).total
@dice-roller/rpg-dice-roller 5.5.1 new DiceRoll(expressao).total
@randsum/roller 4.0.0 roll(expressao).total
dice-roller-parser 0.1.8 roller.roll(expressao).value

Cada operação chama a API pública com a mesma expressão e lê o total. O Dice Core usa cache da expressão compilada após o aquecimento; o teste mantém os padrões de cache de todos os pacotes. Um contador consome os valores para evitar que o resultado seja ignorado. Não incluímos importação inicial, rede, interface, GPU nem animação do Dice View.

Cenários equivalentes

Usamos cinco regras comuns:

Expressão Regra
1d20 Um dado de vinte lados
2d6+3 Dois d6 com modificador
4d6kh3 Quatro d6, mantendo os três maiores
10d6 Dez d6
3d8+2d6 Dados de tamanhos diferentes

Na regra dos três maiores, RANDSUM usa a notação equivalente 4d6L (descarta o menor). Nas outras regras, a expressão é idêntica. Antes de medir, o script verifica cem resultados por biblioteca e cenário dentro do intervalo válido.

Repetições e ambiente

O script aquece cada implementação, calibra cada biblioteca separadamente para cerca de 250 ms por amostra e mede sete amostras. Publicamos a mediana de operações por segundo. A ordem das bibliotecas gira entre amostras; a coleta de lixo é acionada antes de cada amostra, fora da medição.

Os resultados atuais vêm de Node.js 24.18.0 no Windows, em um AMD Ryzen 5 5500. Rode em outra máquina para obter outra leitura:

cd scripts/benchmarks
npm ci
npm run bench

O comando reescreve results.json. A página de resultados mostra os valores medidos e a data. O código está em scripts/benchmarks/benchmark.mjs.

Limitações

O Dice Core retorna dados estruturados, grupos, eventos e metadados para replay. As bibliotecas comparadas retornam outros formatos e volumes de dados. O teste lê apenas o total; não normaliza a quantidade de informação produzida.

Também usamos a fonte aleatória padrão de cada biblioteca. Dice Core usa crypto.getRandomValues sem seed. Custos de RNG e estratégias de cache diferentes afetam o throughput. Não extrapole os números para navegador, expressões explosivas, sistemas específicos, memória ou renderização 3D.

Para o que fazer com essa leitura na integração, siga o guia de performance.