高级设置
约 1119 字大约 4 分钟
数据存储架构
应用根据运行环境自动选择存储方式:
Tauri 版本
数据存储在 Tauri 应用数据目录的 data/ 子目录中,以独立 JSON 文件保存,并通过 Rust 后端读写。该目录不是安装目录。存储键包括:
settings:用户设置lists:名单数据currentListId:当前选中的名单 IDstatistics:统计数据records:抽取记录balance:平衡算法配置password:密码哈希cardTrayHistory:翻牌收牌历史cardUsedNames:翻牌已用名字cardSettings:翻牌设置
Electron 版本
使用 electron-store 包进行数据持久化,数据存储在用户数据目录中。
浏览器版本(线上版)
使用 localStorage 进行数据存储,数据保存在浏览器本地。
名单管理高级功能
白名单机制
系统内置一个不可编辑的白名单:
- 内容:
再来一次(中文)/Again!(英文) - 作用:白名单成员在批量删除时受保护,不会被删除
- 显示:名单管理页面中以特殊标记显示
名单导入导出
名单导出
- 格式:
.json文件 - 内容:单个名单数据(名称 + 人员列表)
- 操作位置:名单管理页面
- 无需密码验证
名单导入
- 格式:
.json文件 - 操作位置:名单管理页面
- 无需密码验证
- 注意:导入会添加为新名单,不影响现有名单
翻牌点名高级配置
牌子数量
翻牌模式下可配置的牌子数量,影响每次发牌的数量。
快速抽取数量
一键多抽功能的抽取数量配置。
收牌历史持久化
翻牌模式的收牌历史和已用名字会自动持久化存储,关闭应用后重新打开可恢复上次状态。
平衡算法技术细节
算法原理
当前算法标识为 cyrenenameroller-balance/v3,模块固定命名为 src/utils/cyrene-balance.js。算法基于以下步骤工作:
- 计算期望误差:比较每位普通成员的实际次数与当前平均期望次数
- 自适应负反馈:低于期望者提高权重,高于期望者降低权重,当前极差越大则恢复反馈越强
- 预测下一状态:模拟候选者被抽中后的绝对极差,对从目标 2 越界的选择施加温和惩罚
- 概率护栏:所有概率保持大于零;候选者不少于 4 人时,单人当前一抽概率不超过 30%
- 安全随机:优先使用 Web Crypto 生成随机数,再执行加权选择
公平边界
- 绝对极差
2是课堂场景的固定软目标,不是随机过程的硬上限 - 若要求任何时刻绝不超过 2,就必须把部分候选者概率设为 0,这与“每个人始终有机会”冲突
- 固定种子模拟中,13 人连续抽取 10 万次的最终极差为 1-2;瞬时状态仍可能短暂达到更高值
- 用户只能开关公平算法,不能修改灵敏度、曲线、倍率或极差目标
多人状态更新
- 允许重复:人数没有名单规模上限;每个位置抽完后更新临时计数,同一人再次出现前已受到上一次结果的反馈
- 禁止重复:人数上限为当前候选人数;抽中后更新临时计数并从本批候选池排除,再对剩余人员重新计算
数据操作安全
密码保护机制
- 哈希算法:SHA-256
- 存储方式:仅存储哈希值,不存储明文密码
- 保护范围:数据导出、数据导入、清空记录、清除全部
- 不受保护:名单编辑、设置修改、日常使用
导入数据注意事项
- 导入会覆盖当前所有数据
- 导入后需要手动重启应用
- 建议在导入前先导出当前数据作为备份
性能优化建议
低性能设备
在低性能设备上,建议关闭以下效果以提升流畅度:
- 亚克力模糊效果
- 阴影效果
- 过渡动画
大量名单
当名单中人数较多时:
- 平衡算法的计算量会相应增加
- 统计页面的渲染可能变慢
- 建议适当控制单个名单的人数
贡献者
更新日志
2026/8/13 08:20
查看所有更新日志
6a0aa-fix: install deps before docs:build (Cloudflare Pages v2 image skips auto install for bun)于
