ERPG Dice / Benchmarks

深入了解 Dice Core。

比较相同表达式下的功能和完整掷骰吞吐量。每项速率均有可复现的测试和明确限制。

5项等价的 Core 性能测试
4种 Dice Core 游戏系统 API

在五项简单性能测试中,对比库更快。上方数字是一项实测中位数,并非市场领先声明。完整结果与限制见下文。

01 / 功能

不止图表上的数字。

Dice Core 将丰富的表达式与游戏系统结果及结构化事件日志相连。下表比较公开 API,同时区分不同的结果结构。

Dice Core

规则引擎对比

查看 Core API ↗
功能Dice Core v3.7.1RPG Dice Roller ↗RANDSUM ↗Dice Roller Parser ↗
骰子表达式高级表达式及四种游戏系统 API丰富的骰子表达式RDN Level 4;19 种修饰符Roll20 风格表达式
随机数来源默认加密随机源;种子与绑定计划的重放默认 Math.random;可配置加密源或带种子的 MT自定义 randomFn,支持种子或加密 RNG默认 Math.random;可注入随机函数
结果结构骰子、分组、事件日志和重放元数据掷骰结果与历史记录初始及最终结果,附带描述结果对象与独立解析 API

Core 列对应 v3.7.1。竞品描述来自其公开 API 文档,可能与性能测试锁定版本独立变化。

02 / Dice Core · 性能

相同规则,实测吞吐量。

每次操作使用相同表达式调用公开掷骰 API 并读取总值。内部缓存保持启用。数值越高越快;每个场景内的条形图使用相同刻度。

1d20

一颗 d20

7 次采样;每个包分别校准迭代次数
  1. @erpg/dicecore9,180 次掷骰 / 样本27,853 ops/s
  2. @dice-roller/rpg-dice-roller23,642 次掷骰 / 样本154,642 ops/s
  3. @randsum/roller27,926 次掷骰 / 样本108,360 ops/s
  4. dice-roller-parser84,289 次掷骰 / 样本317,270 ops/s
2d6+3

两颗骰子加修正值

7 次采样;每个包分别校准迭代次数
  1. @erpg/dicecore7,637 次掷骰 / 样本25,175 ops/s
  2. @dice-roller/rpg-dice-roller20,275 次掷骰 / 样本76,302 ops/s
  3. @randsum/roller8,811 次掷骰 / 样本41,482 ops/s
  4. dice-roller-parser35,650 次掷骰 / 样本200,771 ops/s
4d6kh3

四颗骰子保留最高三颗

7 次采样;每个包分别校准迭代次数
  1. @erpg/dicecore6,375 次掷骰 / 样本20,177 ops/s
  2. @dice-roller/rpg-dice-roller28,711 次掷骰 / 样本110,317 ops/s
  3. @randsum/roller11,530 次掷骰 / 样本32,240 ops/s
  4. dice-roller-parser48,629 次掷骰 / 样本196,802 ops/s

RANDSUM 使用等价的 4d6L 表达式丢弃最低的一颗骰子。

10d6

十颗骰子

7 次采样;每个包分别校准迭代次数
  1. @erpg/dicecore6,401 次掷骰 / 样本23,561 ops/s
  2. @dice-roller/rpg-dice-roller53,606 次掷骰 / 样本162,339 ops/s
  3. @randsum/roller26,157 次掷骰 / 样本104,461 ops/s
  4. dice-roller-parser64,267 次掷骰 / 样本246,363 ops/s
3d8+2d6

混合面数骰子

7 次采样;每个包分别校准迭代次数
  1. @erpg/dicecore7,363 次掷骰 / 样本25,300 ops/s
  2. @dice-roller/rpg-dice-roller25,487 次掷骰 / 样本82,256 ops/s
  3. @randsum/roller14,164 次掷骰 / 样本61,013 ops/s
  4. dice-roller-parser28,219 次掷骰 / 样本148,960 ops/s

测量日期 2026年9月24日 · AMD Ryzen 5 5500 · Node.js v24.18.0 · win32 10.0.26200 (x64)

03 / 测试方法

可自行复现的测试。

我们锁定包版本,仅测试每个引擎都支持的表达式。每个场景先预热、验证结果,再计时七次。每个包的迭代次数单独校准,使每次采样约为 250 毫秒;最终公布中位数。

自行运行

cd scripts/benchmarks
npm ci
npm run bench

此命令会重写 results.json。掷骰计时期间不使用网络、GPU 或浏览器。

下载原始数据 ↗

04 / Dice Core

另外两种 Core 工作方式。

这两项独立实验展示预编译和随机源选择如何影响同一项 4d6kh3 掷骰。由于操作或随机性不同,它们不计入市场排名。

28,094 ops/s

预编译计划

在计时循环外编译 4d6kh3,再使用默认随机源执行该计划。

96,121 ops/s

固定种子,xoshiro128ss

使用缓存表达式,并省去获取新加密种子的过程。重复使用同一种子,因此结果是重复的确定性序列,而非独立随机掷骰。

05 / 如何解读数据

吞吐量无法说明一切。

完整的 Dice Core 结果包含结构化骰子、分组、事件历史和重放元数据。对比包返回不同结构。预热后 Dice Core 会缓存重复表达式。测试使用各包默认 API,只读取总值;并未统一结果深度、缓存行为、功能或随机源成本。

已测量

在 Node.js 中对五种常见且有界的表达式重复调用公开掷骰 API。

未纳入测试

浏览器行为、包加载、内存、大型或爆炸骰、特定系统规则及 Dice View 的 3D 帧。

随机源不同

Dice Core 默认使用 crypto.getRandomValues;各对比包使用自己的默认随机源。这会影响耗时。

Dice Core 在此环境中每秒完成数万次掷骰,但另外三个库在这些基础吞吐量测试中领先。请按游戏所需的规则、结果结构和集成方式选择引擎。

06 / 资料来源

版本与 API 资料

功能文档

完整方法与实现位于本站仓库的 scripts/benchmarks/README.md 和 benchmark.mjs。