Performance em uma aplicação de RPG

Interprete os benchmarks, reutilize planos, escolha a projeção de resultado e meça o fluxo completo do seu jogo.

Throughput é uma parte da experiência

No benchmark reproduzível, o Dice Core processou dezenas de milhares de expressões simples por segundo no Node.js. Os três pacotes comparados foram mais rápidos nessas operações. A medição é útil para dimensionar um servidor, mas uma rolagem real envolve validação, regras, persistência, transporte e, às vezes, animação 3D. Meça o caminho que seu jogo executa.

Uma chamada completa de rollRpgDice retorna o total e também dados individuais, grupos, eventos e metadados de replay. Esses campos ajudam a explicar a rolagem na interface e reproduzi-la depois. Compare bibliotecas também pelo contrato de dados que sua aplicação usa.

Reutilize um plano para fórmulas recorrentes

Se a mesma fórmula é rolada muitas vezes, você pode compilá-la uma vez e passar o plano para as rolagens seguintes:

import { compileRpgDice, rollRpgDice } from '@erpg/dicecore/core'

const ataque = compileRpgDice('2d20kh1+5')

function rolarAtaque() {
  return rollRpgDice(ataque)
}

O experimento separado do harness mede esse modo com 4d6kh3. Ele representa um fluxo diferente da tabela comparativa, que usa uma expressão repetida com o cache padrão do Dice Core. Se as expressões mudam a cada requisição, meça também o custo de compilá-las.

Solicite a projeção necessária

O Core oferece resultados com níveis diferentes de detalhe. Escolha de acordo com a tela:

API Quando usar
rollRpgDice Quando precisa do resultado completo, incluindo grupos e eventos
rollRpgDiceDetails Quando precisa dos dados, sem grupos, eventos ou texto de saída
rollRpgDiceSummary Quando precisa do resumo, sem dados e eventos
import { rollRpgDiceSummary } from '@erpg/dicecore/core'

const resumo = rollRpgDiceSummary('2d6+3')
console.log(resumo.total)

Essas APIs têm contratos distintos. Escolher a projeção certa reduz a quantidade de dados consumida pela aplicação; não assumimos ganho de throughput sem medir seu caso.

Valide antes de executar entradas livres

Para caixas de notação abertas ao público, inspectRpgDiceNotation informa validade e custo estimado sem rolar. Defina limites de custo adequados ao seu produto:

import { inspectRpgDiceNotation } from '@erpg/dicecore/core'

const inspection = inspectRpgDiceNotation('4d6kh3')
if (!inspection.isValid) {
  console.error(inspection.error.code)
} else {
  console.log(inspection.cost.totalStaticDice)
}

Inspecionar e depois rolar custa mais que uma rolagem isolada; use esse passo quando validação prévia for necessária para a interface ou para uma política de limites.

Seed, replay e fonte aleatória

Sem seed, Dice Core obtém entropia com crypto.getRandomValues. Uma seed fornecida permite resultados reproduzíveis; um descritor de replay reproduz uma rolagem e valida a fórmula. Esses modos têm custos diferentes. O benchmark publica a API padrão na comparação e mede uma seed fixa em experimento separado, sem misturar os números.

const result = rollRpgDice('2d20kh1', { seed: 'sessao-42' })
const again = rollRpgDice(result.input, { replay: result.replay })

Para uma aplicação, o teste final deve incluir o dispositivo ou servidor alvo, as notações mais frequentes, a serialização do resultado e o custo visual do Dice View. Veja como o benchmark foi construído antes de interpretar seus números.