Resmon e Profiling

INFO

Prima di ottimizzare bisogna misurare. resmon (client) e il profiler (server) mostrano quanto tempo di CPU usa ogni risorsa.

ObiettivoDettagli
Cosa imparerai• Usare resmon sul client
• Leggere il profiler del server
• Interpretare i numeri e trovare i colli di bottiglia
Prerequisiti• Server avviato
• Giocatore connesso (anche tu)

1. resmon (Client)

resmon è il monitor di performance integrato in FiveM.

  1. Apri la console con F8
  2. Digita resmon
  3. Premi Esc per uscire dalla console: appare la tabella

Come leggere resmon

ColonnaSignificato
msMillisecondi di CPU usati per frame
timeTempo cumulativo
callsNumero di chiamate a nativi
allocsAllocazioni di memoria

TIP

In generale: 1 ms di client ≈ 60 fps. Più risorse totali si avvicinano al budget, più scende l’FPS. Risorse sopra 2-3 ms sono candidate per l’ottimizzazione.


2. Profiler Server

Il server ha un profiler nativo che mostra il tempo di CPU per risorsa.

Comandi

profiler_record_interval 1000      # registra per 1 secondo
profiler_periodic_flush 1
profiler_output <nome_file>

Oppure con txAdmin → Live Console → comandi.

Output tipico

profiler data
myscript_loop       45.2ms  25.6%
ox_inventory        20.1ms  11.4%

WARNING

Un server lento (tick rate basso) causa lag per tutti i giocatori. Mentre lo script client influisce solo sul singolo giocatore, un evento server pesante (loop su tutti i giocatori) penalizza l’intero server.


3. Pattern: Loop Che Toccano Tutti i Giocatori

Il peggior nemico del server è un while true che itera su tutti i giocatori ogni frame.

Non ottimale ❌

-- server.lua
CreateThread(function()
    while true do
        Wait(0)
        for _, player in pairs(GetPlayers()) do
            local coords = GetEntityCoords(GetPlayerPed(player))
            -- ... check per ogni giocatore
        end
    end
end)

Ottimale ✅ — riduci frequenza e iterazioni

-- server.lua
CreateThread(function()
    while true do
        Wait(1000)   -- 1 volta al secondo, non ogni frame
        for _, player in pairs(GetPlayers()) do
            -- ... check
        end
    end
end)

TIP

Sul server usa Wait(1000)+ per controlli globali. Usa eventi e callback per le azioni singole invece di pollare.


4. Identificare il Colpevole

  1. Apri resmon, guarda le prime 5 risorse per ms
  2. Ferma (stop) la risorsa sospetta e ricontrolla se l’FPS sale
  3. Se sale: quella è la causa. Se non cambia: era un falso positivo
  4. Controlla il server con profiler per problemi server-side

TIP

I loop con Wait(0) dentro while true sono la causa #1 di lag client. Vedi Ottimizzazione Script.


Verifica

  • resmon mostra risorse sotto 1-2 ms
  • Nessuna risorsa brucia il 50%+ del budget
  • Il server non mostra loop pesanti nel profiler
  • I controlli globali usano Wait(1000)+ sul server

TIP


Torna alla: Indice Generale