Performance Guide

BusyTab is light by design. It has no database and no per-tick work beyond measuring tick time for %busytab_tps%. Almost all of its cost is placeholder resolution on each refresh.

What a refresh does

Every refresh-interval, for every online player, BusyTab:

  1. Replaces placeholders in every header and footer line, the name format and the nametag.
  2. Sends the header, footer and tab list name to that player.
  3. Updates the player's scoreboard team, but only when their position, prefix, suffix or name color actually changed.

Step 1 runs on BusyTab's own background thread, not on the server's tick threads.

Tuning

  • Keep refresh-interval at 5s or higher on large servers. The work grows with players multiplied by placeholders. 1s with 200 players and ten placeholders is 2,000 lookups a second.
  • Use built-in placeholders where you can. %vault_rank%, %luckperms_prefix% and the other built-in placeholders skip PlaceholderAPI.
  • Avoid expensive PlaceholderAPI expansions in the tab list: anything that queries a database or the web on each call. If the tab list updates late, a slow placeholder is the usual cause.
  • Keep changing values out of nametags. A nametag that changes on every refresh (a ping or a health value, for example) sends a team update to every player each time. A rank or AFK tag changes rarely and costs almost nothing.
  • Trim the header and footer. Each line is one more round of placeholder replacement per player.

Signs the interval is too low

  • The tab list updates noticeably later than the interval you set.
  • Values in the header and footer lag behind for some players.

Raise refresh-interval and run /busytab reload.