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.