Skip to content

性能与运维建议

所属:参考 · 相关:诊断排错 · 命令

大量物品 / 高人数服务器下,QI 的加载、刷新、缓存如何调优与运维。


一、加载与重载

  • 物品 / 段 / 套装 / 动作表在启动/qi reload 时加载。重载会重新编译全部内容并热刷新在线玩家。
  • 大量物品时/qi reload 有一次性开销(编译 + 校验 + 刷新)。建议:
    • 高峰期避免频繁 reload;改完批量一次重载。
    • /qi reload 而非重启,热刷新更快。
  • 编译结果有 LRU 缓存(CompileSessionStore,最多 4096 条,按物品指纹),重复装配命中缓存。

二、装备属性同步开销

属性同步由 EquipmentWatcher 驱动,已做去抖

  • 比对「装备签名」,变了才刷新,避免每 tick 重算。
  • 轮询周期约 1 tick 调度,但实际刷新只在装备变化时发生。

优化点

  • 避免做「每 tick 强制 refreshEquipmentAttributes」的外部逻辑,让 watcher 自己按需刷新。
  • 套装件数变化有额外的延迟刷新(约 1 秒),属正常去抖。

三、动作触发开销

  • 触发有 120ms 去重窗口ActionTriggerDedup),防一次操作多次触发。
  • 冷却存内存(ConcurrentHashMap),重启丢失——这是设计,不持久化。
  • tick 周期触发由 TickHandTicker 每 20 tick 调度,作用于手持 / 装备物品。别配过密的 tick(如每 1 tick),按需用 tick: 40(2 秒)等。

四、常驻效果与套装

  • PermEffectSync 每约 6 秒(120 tick)续期常驻药水效果;这是低频任务。
  • 套装属性掉到阈值下会自动移除 qi:set:<id> 源。

五、刷新命令的范围控制

需要让玩家身上旧物品按新配置重渲染时,按需选范围,别动辄全服全刷:

命令范围何时用
/qi refresh hand仅主手自测最快
/qi refresh equipment装备槽改了装备相关
/qi refresh inventory背包改了背包物品
/qi refresh all全部在线玩家大改后统一刷,人多时谨慎

刷新 = 每件 rebuild() + variables().refresh(),物品越多越重。见 诊断排错 §6


六、写域 / 路由严格模式

config.yml

  • write-domains.strict: trueaction-routing.strict: true默认且推荐:把潜在错误在保存 / 加载时变成硬错误,避免运行时隐患。
  • 仅在迁移 / 调试期临时设 false(降级为警告),稳定后改回 true

层与装配校验报错速查


七、内容包与备份

  • /qi packs export 定期导出内容包,作为内容快照备份 / 跨服分发。
  • 物品 / 套装 / 段都是纯 YAML,直接纳入你的配置版本管理 / 定时备份即可。

导入导出实操


八、监控清单

定期 / 上线后检查:

  • [ ] /qi diagnose —— 子系统全可用(N/M 中 N=M)
  • [ ] /qi problems —— 无未处理问题
  • [ ] 启动日志 —— 属性后端 / 宝石后端按预期接入
  • [ ] 高峰期 /qi reload 频率受控

九、容量规划经验

规模建议
物品数百默认配置足够
物品上千避免高峰 reload;用内容包分包管理;关注 reload 耗时
高人数(数百在线)让 watcher 自管属性刷新,避免外部每 tick 强刷;tick 触发间隔放宽

下一步