# 优化插件

这个指南解释了你有哪些降低本插件 CPU 占用的方法。\
正确的随时检查 CPU 性能的方法是使用 [**/tab cpu**](https://github.com/NEZNAMY/TAB/wiki/Commands-&-Permissions#tab-cpu) 指令。如果输出的值超过它本应当的值，请检查此指南以帮助你优化插件。&#x20;

### #1 - 尽量使用静态文本而不是变量符

静态文本不需要定时刷新，这带来更好的服务器性能。一些变量符完全可以通过静态文本来代替，例如 %maxplayers% 变量符应该很少变化（除非你又改了服务器的最大人数）。另一个可用的选项的根据组或者权限显示不同的内容时使用插件自带的功能而不是使用权限组插件的变量符。&#x20;

### #2 - 变量符刷新间隔

一些变量符会使用很长时间来读取值，这会导致很高的 CPU 占用。然而，这可以通过修改变量符刷新间隔的方法优化。

这只对 PlaceholderAPI 变量符有效，内部变量符有我发现的最佳优化的刷新间隔值并且无法修改。

首先，在你的配置找到这一部分

```
placeholderapi-refresh-intervals:
  default-refresh-interval: 100
  server:
    "%server_uptime%": 1000
    "%server_tps_1_colored%": 1000
  player:
    "%player_health%": 200
    "%player_ping%": 1000
    "%vault_prefix%": 1000
  relational:
    "%rel_factionsuuid_relation_color%": 500
```

刷新间隔是以毫秒为单位。它必须是 50 的倍数，即重复刷新变量符任务的间隔。

**变量符可以分为 3 种:**

**#1 - 服务器变量符**: 这是向所有玩家输出共同值的变量符。例如 %server\_tps%。但并不是所有变量符都是这样，大部分的变量符应该同时因服务器和玩家的不同而输出不同的值。\
在这个分类的变量符占用的 CPU 是 `玩家变量符` 的 `<当前在线玩家数量>` 分之一。\
**警告: 如果 TAB 安装在 BC 上，那么这一部分不会作用于 PlaceholderAPI 的变量符，因为不同服务器的玩家依然拥有不同的值。这时的服务器变量符消耗几乎于玩家变量符一样。**&#x20;

**#2 - 玩家变量符**: 这时根据不同玩家输出不同的值的变量符。例如 %vault\_prefix% - 每个玩家的前缀都不一样。

**#3 - 关系变量符**: 可能为每个玩家组合输出不同值的变量符，通常以 `%rel_` 开头。

`default-refresh-interval` 是所有未列出的 PlaceholderAPI 护身符的刷新间隔。它们自动被视为 `玩家变量符` ，除了以 `%rel_` 开头的变量符 ，它们应该被分为 `关系变量符`。

你应该知道怎么区分玩家变量符和服务器变量符。如果你还是不知道，直接将它们归为 `玩家变量符` 吧。

**警告!** 一些变量符虽然向所有玩家输出共同的值，看起来它们似乎应该被分列为 `服务器变量符` ，但它们中一些会包含检查该玩家是否有效。在这种情况下，你应该把它们分类为 `玩家变量符` 。联系变量符拓展的作者是最佳了解这是玩家变量符还是服务器变量符的最佳方法。

### #3 - 不要使用 RGB

尽管 RGB 颜色看起来很好看，但它们需要将文本拆分成若干 `子颜色` 部分。这会需要一小段时间并消耗一些 CPU 性能，使用旧版颜色代码是提高性能的一个方法之一。

### #4 - unregister-before-register 选项

这是一个默认启用的隐藏选项，目的在于尝试解决 BC 的玩家因 "Team already exists in this scoreboard" 被踢出的 bug。这导致客户端可能会出现一些小问题，但远比从服务器被踢出好得多。

如果你的 TAB 安装在一个 Bukkit 服务器而不是 BC 群组服务器，你可以通过在配置文件新增 `unregister-before-register: false` 这行以禁用该功能。这会让插件不再发送对你来说无用的发包以提高一些性能。

### #5 - 禁用反覆盖

默认情况下，TAB 阻止其他插件覆盖它所带有的功能。这时因为许多服主没有足够的能力去正确配置它们安装的插件，例如关闭 CMI 的碰撞处理，该处理将会破坏 TAB 的名称并且，还有 CMI 也带有 TAB 顶部和底部功能。反覆盖会无意间增加 CPU 消耗。TAB 将会记录所有反覆盖记录到 [anti-override.log](https://github.com/NEZNAMY/TAB/wiki/Action-logging#anti-overridelog) 文件。如果该文件为空或者你没有这个文件，那么看起来你没有插件和 TAB 冲突，只需关闭反覆盖功能即可降低一些消耗。

要关闭该功能，在你的配置文件中找到

```
feature-name:
  anti-override: true
```

并将该选项值设置为 false 即可禁用它。
