Identificar problemas de desempenho geralmente significa aprofundar-se em uma das três categorias: taxa de quadros (compute), memória ou tempo de carregamento.
Roblox possui várias ferramentas para identificar problemas de desempenho, algumas das quais estão disponíveis no cliente Roblox (e, portanto, no Studio) e outras que estão disponíveis apenas no Studio. Enquanto você pode observar o comportamento do cliente diretamente, você deve usar ferramentas para diagnosticar problemas no servidor.
Ferramentas de diagnóstico
| Ferramenta | Descrição | Localização | Atalho de teclado | Ambiente |
|---|---|---|---|---|
| Console do Desenvolvedor | Um console com mensagens de log em tempo real, erros e informações detalhadas sobre memória, rede e desempenho de scripts. É útil para visualizar o consumo de memória, principais estatísticas de saúde do servidor, estatísticas de desempenho de scripts e para iniciar o MicroProfiler do cliente ou do servidor. | Studio In-Game | F9 | Testes no Studio Sessões Ao Vivo |
| MicroProfiler | Uma ferramenta de depuração que detalha quanto tempo computacional é gasto em tarefas a cada quadro. Ela pode gerar dumps para análise mostrando uma divisão precisa de quadros individuais, tornando-a útil para identificar a tarefa específica que causa problemas de desempenho. Você pode executar o profiler tanto no cliente quanto no servidor, dependendo de qual lado apresenta um problema. | Studio In-Game | CtrlAltF6 (⌘⌥F6) | Testes no Studio Sessões Ao Vivo |
| Análise de Cena | Fornece informações comparativas sobre os recursos que suas cenas de cliente e servidor estão usando e quais instâncias são responsáveis por esse uso de recursos. | Studio | N/A | Testes no Studio |
| Estatísticas de Desempenho | Uma barra de ferramentas com estatísticas básicas de desempenho, incluindo consumo de memória, CPU, GPU, dados de rede enviados e recebidos e tempo de ping. | In-Game | CtrlAltF7 (⌘⌥F7) | Testes no Studio Sessões Ao Vivo |
| Estatísticas de Debug | Sobreposições com informações detalhadas sobre gráficos, física, tráfego de rede e FPS. | Studio In-Game | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Testes no Studio Sessões Ao Vivo |
| Simulação de Rede | Propriedades que simulam condições de rede do mundo real, como latência, jitter e perda de pacotes, para testar conexões. | Studio | AltS(⌥S) | Testes no Studio |
| Painel de Desempenho | Um painel com gráficos agregados para uso de memória do cliente e do servidor, taxa de quadros do cliente, batimentos do servidor e taxas de falhas em tempo real. É útil para analisar padrões de desempenho ao longo do tempo. Veja monitorando desempenho. | Painel do Criador | N/A | Sessões Ao Vivo |
Computação do servidor
O batimento do servidor é limitado a 60 FPS para todos os jogos, portanto, valores mais baixos podem indicar um problema de desempenho. Para verificar o batimento do servidor:
Com o Console do Desenvolvedor - Na aba Server Jobs, expanda a linha Heartbeat e verifique o valor de Steps Per Sec, que representa o batimento do seu jogo.
Com o MicroProfiler, você pode verificar o gráfico para ver se o quadro leva mais de 16,67 ms.
Outro sintoma de batimento do servidor degradado é o aumento da latência (comumente conhecida como ping). Quanto mais tempo o servidor levar para concluir seus cálculos a cada quadro, mais tempo levará para processar os dados de rede enviados e recebidos dos clientes. Para verificar o ping médio de todos os jogadores conectados a um servidor, vá para a aba Server Stats no Console do Desenvolvedor.
Computação do cliente
O limite padrão de taxa de quadros do cliente é 60 FPS. No entanto, os usuários podem aumentar seu limite de taxa de quadros para até 240 FPS no Windows.
A taxa de quadros varia bastante entre os dispositivos. Por exemplo, um PC de alto desempenho pode "forçar" um problema computacional e apenas experimentar uma queda imperceptível na taxa de quadros. Se você testar em dispositivos de menor desempenho, os problemas tendem a ser mais severos e, portanto, mais fáceis de perceber.
Para verificar a taxa de quadros do seu jogo:
No cliente, pressione ShiftF5 para mostrar o resumo das estatísticas de depuração.
No menu Janela ⟩ Desempenho do Studio, ative Estatísticas para habilitar as estatísticas de depuração.
Com o MicroProfiler, você pode verificar o gráfico para ver se o quadro leva mais de 16,67 ms.
Memória do servidor
Tente manter o uso de memória do servidor abaixo de 50%. A memória total do servidor usa a seguinte fórmula:
6.25 GiB + (100 MiB * maior_número_de_jogadores_conectados)
Por exemplo, um servidor com 30 jogadores conectados tem aproximadamente 9,18 GiB de memória total. Os servidores ganham memória quando jogadores se conectam, mas não a perdem quando jogadores se desconectam. Se 10 jogadores saírem, o servidor ainda terá 9,18 GiB de memória, em vez de encolher para 8,2 GiB.
Quando servidores são desligados (por exemplo, quando estão vazios ou como parte do processo de atualização), suas substituições começam com a quantidade base de memória e começam a escalar conforme os jogadores se conectam.
Memória do cliente
Existem várias maneiras de verificar o uso de memória para um jogo:
- Abra o Console do Desenvolvedor e vá para a aba Memória. Esta aba fornece uma divisão de como a memória está sendo alocada. Use o cliente em vez do Studio para obter as leituras mais precisas.
- Habilite a visualização Estatísticas de Desempenho a partir do menu de configurações no cliente para ver uma sobreposição com o uso total de memória do cliente.
Um alto uso de memória não é necessariamente indicativo de um problema, mas algumas indicações de que você pode precisar investigar mais são:
- Uma porcentagem significativa de falhas que aparecem no Painel de Desempenho, particularmente um aumento repentino que coincide com uma atualização. Um certo número de falhas é esperado, mas você deve investigar se suas taxas de falha aumentam acima de 2-3%.
- Uma falha ocorre enquanto testa em um dispositivo que você deseja que seu jogo suporte.
Uma parte significativa do consumo de memória de um jogo no cliente vem de ativos, como imagens, malhas e arquivos de áudio, carregados na memória. No Console do Desenvolvedor, verifique os seguintes rótulos sob PlaceMemory:
- GraphicsMeshParts - Memória gráfica consumida por malhas.
- GraphicsTexture - Memória gráfica consumida por texturas.
- Sounds - Memória consumida por arquivos de áudio.
Tempos de carregamento
Não existem ferramentas integradas para verificar tempos de carregamento, mas como eles não requerem precisão em milissegundos, um cronômetro geralmente é tudo que você precisa para entender sua linha de base atual e verificar se você fez uma melhoria substancial. Você pode usar um script de cliente em ReplicatedFirst para ter uma ideia de como suas alterações impactam os tempos de carregamento, mas este script não fornece uma medição completa e de ponta a ponta:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- quatro casas decimais
print("Jogo carregado em " .. roundedLoadTime .. " segundos.")
print("Número de instâncias carregadas: " .. #workspace:GetDescendants())
end)
Para uma visão adicional, ative Print Join Size Breakdown a partir da aba Rede das Configurações do Studio para imprimir as 20 principais instâncias por tamanho e uma divisão percentual por tipo de instância quando você iniciar o jogo no Studio.
Ping
As duas principais medições de ping (latência) são ping de rede e ping de dados.
Ping de rede é o tempo de ida e volta medido desde que o cliente envia um pacote de dados de rede até quando recebe a resposta de eco do servidor. É semelhante ao que seria reportado como tempo pela utilidade de rede ping de uso geral.
O ping de rede é visível na barra de Estatísticas de Desempenho. Ele é principalmente afetado pelo comprimento do caminho de rede entre o cliente e o servidor e está fora do seu controle. No entanto, você pode simular ping e outras condições de rede usando simulação de rede ao testar no Studio.
Ping de dados é o tempo de ida e volta medido desde que o cliente envia dados de forma confiável através do sistema de replicação até quando recebe uma resposta de eco do sistema de replicação do servidor. Ele inclui o tempo gasto nas filas de replicação tanto do cliente quanto do servidor, juntamente com retransmissões semelhantes ao TCP de pacotes perdidos ou corrompidos.
Ping de dados é semelhante a enviar um evento remoto confiável do cliente, recebê-lo no servidor e, em seguida, enviar um evento remoto confiável do servidor para o cliente em resposta. Como o ping de dados também inclui o tempo gasto na rede entre o cliente e o servidor, ele é maior ou igual ao ping de rede.
O ping de dados médio para todos os jogadores conectados a um servidor é visível na aba Server Stats do Console do Desenvolvedor. O ping de dados para um cliente individual é visível usando ShiftF3 para exibir as estatísticas de depuração de rede.
O ping de dados é afetado tanto pelo caminho da rede quanto pelos atrasos de enfileiramento de replicação. Quando o servidor gera dados de replicação mais rápido do que a rede pode enviá-los (ou mais rápido do que o cliente pode processá-los), os dados devem esperar nas filas de replicação. Alguma diferença entre o ping de dados e o ping de rede é normal devido tanto às retransmissões de rede quanto à forma como os dados de rede são processados pelo aplicativo Roblox. No entanto, se o ping de dados for significativamente maior que o ping de rede, use o MicroProfiler para ver o tráfego de rede. Para sugestões de otimização, consulte rede e replicação.