Performance Tuning - QBCore Guide for FiveM
Introduction
This tutorial turns Performance Tuning into a clean, developer-friendly guide for QBCore/FiveM. You will follow a step-by-step flow, copy the relevant code patterns, and learn the “why” behind the setup.
Requirements
- QBCore installed and running on a dev server
- Basic Lua knowledge and comfort reading FiveM patterns
- A test workflow for iterating safely (dev server, not production)
- Optional: a code editor with Lua/FiveM helpers (VS Code recommended)
Step-by-Step Guide
Step 1: Establish a Baseline
In this step, you will apply the establish a baseline concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 2: Instrument Your Code
In this step, you will apply the instrument your code concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 3: Optimise Server Scripts
In this step, you will apply the optimise server scripts concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 4: Optimise Client Scripts and UI
In this step, you will apply the optimise client scripts and ui concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 5: Database and External Services
In this step, you will apply the database and external services concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 6: Ongoing Monitoring
In this step, you will apply the ongoing monitoring concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Step 7: See Also
In this step, you will apply the see also concept as a practical change: define the pieces, wire them together, then verify the behavior in your dev server.
Code Example
-- Example: reduce work in loops with caching + dynamic sleep
local function GetDistance(a, b)
local dx = a.x - b.x
local dy = a.y - b.y
local dz = a.z - b.z
return math.sqrt(dx*dx + dy*dy + dz*dz)
end
CreateThread(function()
while true do
local sleep = 1000
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
-- Example location
local dist = GetDistance(coords, vector3(0.0, 0.0, 0.0))
if dist < 3.0 then
sleep = 0
-- Do your expensive work only when needed
end
Wait(sleep)
end
end)Tips & Best Practices
- Keep authority on the server: validate inputs before money/database operations.
- Start with one resource/module at a time, then refactor after you verify it works.
- Use callbacks for request/response flows and events for push/UX updates.
- When you run loops, avoid freezes: always yield with Wait() (client/server) and cache hot values.