Identificare problemi di prestazioni generalmente significa approfondire una delle tre categorie: frame rate (calcolo), memoria o tempo di caricamento.
Roblox dispone di numerosi strumenti per identificare problemi di prestazioni, alcuni dei quali sono disponibili nel client di Roblox (e quindi anche in Studio) e alcuni sono disponibili solo in Studio. Mentre puoi osservare il comportamento del client direttamente, devi utilizzare strumenti per diagnosticare i problemi del server.
Strumenti diagnostici
| Strumento | Descrizione | Posizione | Scorciatoia da tastiera | Ambiente |
|---|---|---|---|---|
| Console dello sviluppatore | Una console con messaggi di log in tempo reale, errori e informazioni dettagliate su memoria, rete e prestazioni degli script. È utile per visualizzare il consumo di memoria, le statistiche chiave sulla salute del server, le statistiche sulle prestazioni degli script e per avviare il MicroProfiler del client o del server. | Studio In-Game | F9 | Studio Testing Live Sessions |
| MicroProfiler | Uno strumento di debugging che suddivide quanto tempo di calcolo viene speso su compiti ogni frame. Può generare dump per analisi mostrando una suddivisione precisa dei frame individuali, rendendolo utile per identificare il compito specifico che causa problemi di prestazioni. Puoi eseguire il profiler sia sul client che sul server, a seconda di quale lato presenta un problema. | Studio In-Game | CtrlAltF6 (⌘⌥F6) | Studio Testing Live Sessions |
| Analisi della scena | Fornisce informazioni comparative a colpo d'occhio riguardo le risorse utilizzate dalle scene client e server e quali istanze sono responsabili di quel consumo di risorse. | Studio | N/A | Studio Testing |
| Statistiche sulle prestazioni | Una barra degli strumenti con statistiche di base sulle prestazioni, incluso il consumo di memoria, CPU, GPU, dati di rete inviati e ricevuti e tempo di ping. | In-Game | CtrlAltF7 (⌘⌥F7) | Studio Testing Live Sessions |
| Statistiche di debug | Overlays con informazioni dettagliate relative a grafica, fisica, traffico di rete e FPS. | Studio In-Game | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Studio Testing Live Sessions |
| Simulazione della rete | Proprietà che simulano condizioni di rete del mondo reale come latenza, jitter e perdita di pacchetti per testare connessioni. | Studio | AltS(⌥S) | Studio Testing |
| Dashboard delle prestazioni | Un cruscotto con grafici aggregati per utilizzo di memoria client e server, frame rate del client, battito cardiaco del server e tassi di crash in tempo reale. È utile per analizzare i modelli di prestazioni nel tempo. Vedi monitoraggio delle prestazioni. | Creator Dashboard | N/A | Live Sessions |
Calcolo del server
Il battito cardiaco del server è limitato a 60 FPS per tutti i giochi, quindi valori più bassi potrebbero indicare un problema di prestazioni. Per controllare il battito cardiaco del server:
Con la Console dello sviluppatore - Nella scheda Server Jobs, espandi la riga Heartbeat e controlla il valore Steps Per Sec, che rappresenta il battito cardiaco del tuo gioco.
Con il MicroProfiler, puoi controllare il grafico per vedere se il frame impiega più di 16.67 ms.
Un altro sintomo di un battito cardiaco del server degradato è l'aumento della latenza (comunemente noto come ping). Più a lungo il server impiega a completare i propri compiti per ogni frame, più a lungo impiega a elaborare i dati di rete inviati e ricevuti dai client. Per controllare il ping medio per tutti i giocatori connessi a un server, vai alla scheda Server Stats nella Console dello sviluppatore.
Calcolo del client
Il limite di frame rate del client per impostazione predefinita è di 60 FPS. Tuttavia, gli utenti possono aumentare il proprio limite di frame rate fino a 240 FPS su Windows.
Il frame rate varia enormemente tra i dispositivi. Ad esempio, un PC di fascia alta potrebbe essere in grado di "forzare" un problema di calcolo e sperimentare solo un calo di frame rate impercettibile. Se testi su dispositivi di fascia bassa, i problemi tendono ad essere più gravi e quindi più facili da notare.
Per controllare il frame rate del tuo gioco:
Nel client, premi ShiftF5 per mostrare il riepilogo delle statistiche di debug.
Dal menu Finestra di Studio ⟩ Prestazioni, attiva Statistiche per abilitare le statistiche di debug.
Con il MicroProfiler, puoi controllare il grafico per vedere se il frame impiega più di 16.67 ms.
Memoria del server
Cerca di mantenere l'uso della memoria del server al di sotto del 50%. La memoria totale del server utilizza la seguente formula:
6.25 GiB + (100 MiB * numero_massimo_di_giocatori_connessi)
Ad esempio, un server con 30 giocatori connessi ha circa 9.18 GiB di memoria totale. I server guadagnano memoria quando i giocatori si connettono, ma non la perdono quando i giocatori si disconnettono. Se 10 giocatori lasciano, il server ha ancora 9.18 GiB di memoria invece di ridursi a 8.2 GiB.
Quando i server vengono spenti (ad esempio, quando sono vuoti o come parte del processo di aggiornamento), i loro sostituti iniziano con la base di memoria e iniziano a scalare quando i giocatori si connettono.
Memoria del client
Ci sono diversi modi per controllare l'uso della memoria per un gioco:
- Apri la Console dello sviluppatore e passa alla scheda Memoria. Questa scheda fornisce una suddivisione di come viene allocata la memoria. Usa il client piuttosto che Studio per ottenere i readout più accurati.
- Abilita la visualizzazione delle Statistiche sulle prestazioni dal menu delle impostazioni nel client per vedere un overlay con l'uso totale della memoria del client.
Un uso elevato della memoria non è necessariamente indicativo di un problema, ma alcune indicazioni che potresti dover indagare ulteriormente sono:
- Una percentuale significativa di crash del client mostrati nel Dashboard delle prestazioni, in particolare un aumento repentino che coincide con un aggiornamento. Alcuni crash sono attesi, ma dovresti indagare se i tuoi tassi di crash aumentano oltre il 2-3%.
- Un crash si verifica durante i test su un dispositivo che desideri supportare nel tuo gioco.
Una parte significativa del consumo di memoria di un gioco nel client proviene da asset, come immagini, mesh e file audio, caricati in memoria. Nella Console dello sviluppatore, controlla le seguenti etichette sotto PlaceMemory:
- GraphicsMeshParts - Memoria grafica consumata da mesh.
- GraphicsTexture - Memoria grafica consumata da texture.
- Sounds - Memoria consumata da file audio.
Tempi di caricamento
Non ci sono strumenti integrati per controllare i tempi di caricamento, ma poiché non richiedono una precisione a livello di millisecondo, un cronometro è di solito tutto ciò di cui hai bisogno per comprendere il tuo attuale baseline e controllare se hai apportato un miglioramento sostanziale. Puoi utilizzare uno script client in ReplicatedFirst per avere un'idea di come le tue modifiche impattino i tempi di caricamento, ma questo script non fornisce una misurazione completa e end-to-end:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- quattro decimali
print("Gioco caricato in " .. roundedLoadTime .. " secondi.")
print("Numero di istanze caricate: " .. #workspace:GetDescendants())
end)
Per ulteriori approfondimenti, abilita Stampa suddivisione delle dimensioni di Join dalla scheda Rete delle Impostazioni di Studio per stampare le prime 20 istanze per dimensione e una suddivisione percentuale per tipo di istanza quando avvii il gioco in Studio.
Ping
Le due misurazioni principali del ping (latenza) sono ping di rete e ping di dati.
Il ping di rete è il tempo di andata e ritorno misurato da quando il client invia un pacchetto di dati di rete a quando riceve la risposta di eco del server. È simile a ciò che verrebbe riportato come time dall'utilità di rete ping di uso generale.
Il ping di rete è visibile nella barra delle Statistiche sulle prestazioni. È influenzato principalmente dalla lunghezza del percorso di rete tra il client e il server ed è al di fuori del tuo controllo. Tuttavia, puoi simulare il ping e altre condizioni di rete utilizzando la simulazione della rete durante i test in Studio.
Il ping di dati è il tempo di andata e ritorno misurato da quando il client invia dati in modo affidabile attraverso il sistema di replicazione a quando riceve una risposta di eco dal sistema di replicazione del server. Include il tempo speso nelle code di replicazione sia del client che del server, insieme a ritrasmissioni tipo TCP di pacchetti persi o danneggiati.
Il ping di dati è simile all'invio di un evento remoto affidabile dal client, ricevendolo sul server e poi inviando un evento remoto affidabile dal server al client in risposta. Poiché il ping di dati include anche il tempo speso sulla rete tra il client e il server, è maggiore o uguale al ping di rete.
Il ping di dati medio per tutti i giocatori connessi a un server è visibile nella scheda Server Stats della Console dello sviluppatore. Il ping di dati per un client individuale è visibile utilizzando ShiftF3 per visualizzare le statistiche di debug di rete.
Il ping di dati è influenzato sia dal percorso di rete che dai ritardi di coda di replicazione. Quando il server genera dati di replicazione più velocemente di quanto la rete possa inviarli (o più velocemente di quanto il client possa elaborarli), i dati devono aspettare nelle code di replicazione. Alcune differenze tra il ping di dati e il ping di rete sono normali a causa sia delle ritrasmissioni di rete sia del modo in cui i dati di rete vengono elaborati dall'app Roblox. Tuttavia, se il ping di dati è significativamente più elevato del ping di rete, utilizza il MicroProfiler per visualizzare il traffico di rete. Per suggerimenti di ottimizzazione, vedi rete e replicazione.