O MicroProfiler é uma ferramenta de otimização de desempenho e solução de problemas no Roblox Studio e no cliente Roblox. Ele fornece informações de temporização detalhadas e visuais para todas as tarefas do motor que são executadas durante um quadro, como animação de personagens, atualização de física, execução de scripts e renderização de geometria. Você pode identificar quais tarefas foram executadas durante qual quadro, quanto tempo essas tarefas levaram para executar e se alguma delas fez com que você perdesse suas metas de tempo de quadro.
Tempos de quadro
Para usar o MicroProfiler, você deve entender a relação entre tempo de quadro e taxa de quadros.
- O tempo de quadro é quanto tempo um quadro levou para ser renderizado na tela, geralmente medido em milissegundos.
- A taxa de quadros é o número de quadros renderizados na tela, geralmente medido em quadros por segundo (FPS).
Tempos de quadro mais baixos significam taxas de quadros mais altas. Divida 1.000 milissegundos (1 segundo) pelo tempo de quadro para obter a taxa de quadros.
| Tempo médio de quadro | Quadros por segundo |
|---|---|
| 33,33 ms | 30 FPS |
| 16,67 ms | 60 FPS |
| 8,33 ms | 120 FPS |
| 4,17 ms | 240 FPS |
Para um gameplay suave, no entanto, não é suficiente ter uma alta taxa de quadros. Você precisa de tempos de quadro consistentes. Por exemplo, se 59 quadros chegam em 10 milissegundos e um quadro em 410 milissegundos, os jogadores percebem um grande e brusco engasgo, mesmo que o jogo esteja rodando a 60 FPS. Se todos os quadros levam aproximadamente a mesma quantidade de tempo para renderizar, seu jogo parecerá perceptivelmente mais suave devido a essa consistência, especialmente em taxas de quadros mais baixas.
O MicroProfiler foca totalmente no tempo de quadro. Seu propósito é ajudá-lo a identificar picos de tempo de quadro e o que os causou.
Abra o MicroProfiler
Abrir o MicroProfiler varia de acordo com a plataforma:
No cliente móvel, abra o menu Configurações e mude o MicroProfiler para Ativado. Então, a partir de uma máquina de desenvolvimento na mesma rede, use seu navegador da web para navegar até o endereço IP e a porta fornecidos.

Esta captura de tela mostra um endereço IP de 172.18.56.105 e uma porta de 1338, então você navega até 172.18.56.105:1338. Dependendo da configuração de rede do seu dispositivo, você pode ver vários endereços IP. Se um não funcionar, tente o próximo.
No cliente desktop, pressione CtrlF6 (⌘F6).
No Studio, pressione CtrlF6 (⌘F6).
Geralmente, o cliente móvel é o melhor lugar para perfilar seu jogo. A maioria dos jogadores no Roblox usa telefones e tablets, e esses dispositivos têm severas limitações térmicas e de energia que limitam seu desempenho. Se seu jogo roda bem em um tablet Android de médio alcance, ele quase certamente terá um desempenho muito melhor em um desktop para jogos.
Fundamentos do MicroProfiler
O MicroProfiler possui dois componentes principais: o gráfico de barras de tempo de quadro e a linha do tempo de tarefas detalhadas.
- O gráfico de tempo de quadro se estende ao longo do topo da interface e mostra quanto tempo cada quadro levou para renderizar. Barras mais altas significam tempos de quadro mais longos.
- A linha do tempo mostra todas as tarefas individuais que foram executadas durante o quadro. Barras mais largas representam tarefas que levaram mais tempo para serem executadas.
Um fluxo de trabalho típico no MicroProfiler é usar o gráfico de tempo de quadro para identificar um pico (uma barra mais alta) e então usar a linha do tempo para identificar quais tarefas causaram o pico. Então, você pode verificar a Referência de Tags para informações sobre a tarefa e como melhorar seu desempenho.

Gráfico de tempo de quadro
A altura de cada barra indica o número de milissegundos que levou para completar o quadro. Quadros mais recentes estão à direita. Passe o mouse sobre um quadro para algumas informações básicas sobre uso de CPU e GPU.

Barras laranjas são quadros onde o Tempo de Parede de Jobs excede o Tempo de Parede de Renderização. Nestes quadros, pelo menos uma das threads de trabalho, que fazem coisas como executar scripts, calcular física e tocar animações, levou mais tempo para rodar do que a thread de renderização principal.
Se o jogo não está atingindo suas metas de tempo de quadro e tem um grande número de quadros laranjas, causas comuns são scripts, física e animações. Veja Melhorar desempenho.
Barras azuis são quadros onde o Tempo de Parede de Renderização excede o Tempo de Parede de Jobs. Nestes quadros, a thread de renderização principal levou mais tempo do que qualquer uma das threads de trabalho.
Se o jogo não está atingindo suas metas de tempo de quadro e tem um grande número de quadros azuis, isso indica um gargalo de renderização. Causas comuns são densidade excessiva de objetos, movimento de objetos e iluminação. Veja Melhorar desempenho.
Barras vermelhas são quadros onde duas condições são verdadeiras:
- Tempo de Parede de Renderização excede Tempo de Parede de Jobs
- Tempo de Espera de GPU é maior que 2,5 milissegundos
Barras vermelhas são menos comuns que as laranjas e azuis e muitas vezes são resultado de complexidade excessiva de objetos, tamanho de textura e efeitos visuais. A otimização é semelhante às barras azuis. Veja Melhorar desempenho.
Tarefas pequenas no final de um quadro podem às vezes distorcer o Tempo de Parede de Jobs e o Tempo de Parede de Renderização, o que é uma boa razão para focar mais no tempo de quadro do que na cor do quadro. Não há uma "boa" cor a qual aspirar. Uma mistura de laranjas, azuis e vermelhas não é problemática desde que você esteja atingindo suas metas de tempo de quadro. Se você não estiver atingindo suas metas de tempo de quadro, as cores podem indicar onde otimizar.
Linha do tempo
Clique com o botão esquerdo e arraste para mover a linha do tempo. Em uma máquina com muitos núcleos de CPU, você pode precisar mover para cima ou para baixo bastante para encontrar a thread que executa uma tarefa específica.

A rolagem aumenta e diminui o zoom da linha do tempo. Combinado com os rótulos de milissegundos na parte superior da linha do tempo, você pode ter uma noção de quanto tempo uma tarefa levou em um sentido absoluto, mas também quanto tempo levou em relação a outras tarefas.

A sobreposição verde no gráfico de barras indica o número de quadros atualmente visíveis na linha do tempo—seu nível de zoom. Clique com o botão esquerdo em uma barra de quadro para pular para aquela posição na linha do tempo.
Você pode precisar ajustar seu nível de zoom, mas passar o mouse sobre uma barra destaca o quadro na linha do tempo. Linhas cinzas claras delimitam os quadros.

Rótulos que aparecem diretamente abaixo de outro rótulo indicam tarefas que são executadas como parte da tarefa de nível superior.
Em vez da tarefa pai, você geralmente quer solucionar os problemas das tarefas filhas com pior desempenho; uma tarefa pai não pode ser menor que a soma de suas tarefas filhas.
Clique com o botão direito em um rótulo para aumentar o zoom da linha do tempo exatamente para a duração daquela tarefa.
Se a quantidade de informações for esmagadora, use o menu Grupos ou Threads para filtrar a linha do tempo. Por exemplo, você pode querer ver apenas tarefas de Renderização na thread principal.

Use CtrlF (⌘F) para pular para a ocorrência de uma tarefa que consome mais tempo no dump. Por exemplo, computeLightingPerform é executado em cada quadro do cliente. Se você procurar por isso em um dump com 128 quadros, poderá pular para o quadro em que levou mais tempo para completar.
Threads
Assim como muitos programas, o Roblox usa múltiplas threads para executar sequências de tarefas ao mesmo tempo. O MicroProfiler exibe o nome da thread no lado esquerdo da linha do tempo.

Existem três tipos importantes de threads:
Principal ("RBX Principal"): Lida com tarefas de renderização baseadas em CPU. Processa entradas, Humanoids, animações/tweens, propriedade física, som e espera por retomas de script. Também atualiza interfaces do Studio e coordena as outras threads.
Trabalhador ("RBX Trabalhador"): Ajuda a thread principal com rede, física e busca de caminhos. Devido ao número de núcleos em CPUs modernas, você provavelmente terá muitas threads de trabalhador, a maioria das quais está em um estado de espera em um determinado momento.
Renderização ("GPU"): Segue uma lógica de "preparar, executar, apresentar". Comunica-se com a unidade de processamento gráfico (GPU) do dispositivo.
- Preparar: As informações da thread principal são usadas para atualizar modelos de renderização.
- Executar: Emitir comandos de renderização, incluindo interfaces 2D.
- Apresentar: Sincroniza com a GPU.
Perfis de script personalizados
Se seus scripts estão executando tarefas complicadas, você pode perfilá-los em partes críticas do código para garantir que não estejam levando muito tempo. Envolva o código com debug.profilebegin() e debug.profileend() para cronometrar tudo que foi feito entre essas chamadas de função e criar um rótulo na linha do tempo do MicroProfiler.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Trabalho Duro")
-- Exemplo de trabalho duro: trocar duas variáveis 200.000 vezes
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)
Pela sua duração na linha do tempo, você pode perceber que a função está usando muito tempo de processamento em comparação com outras tarefas.
Analisar capturas com o Assistente
No Studio, você pode pedir ao Assistente para analisar automaticamente uma captura pausada do MicroProfiler, identificar gargalos de desempenho e propor soluções.
- No Studio, abra o MicroProfiler com CtrlF6 (⌘F6).
- Quando você identificar um pico de tempo de quadro, pause a captura pressionando Pausar no menu superior ou usando CtrlP (⌘P).
- Abra o Assistente e peça para analisar a captura. Exemplos de perguntas incluem:
- "Capturei um pico de tempo de quadro no MicroProfiler—analise-o."
- "O que causou o pico?"
- "É baseado em física ou em script?"
- "Qual categoria tem o maior tempo exclusivo?"
- "Quando estou no hangar, a FPS cai. Reproduza o problema, use o MicroProfiler para encontrar a causa, conserte-o e reteste."
O Assistente lê a captura pausada através da API do MicroProfiler e retorna um relatório sobre os gargalos prováveis, junto com mudanças de script ou cena propostas que você pode aplicar.
Essa funcionalidade também funciona via o servidor Studio MCP, para que você possa integrar análises do MicroProfiler em seu próprio agente de IA ou loop de agente para obter feedback automático sobre como as novas mudanças afetam o desempenho do seu jogo.
Salvar dados de quadros
Se você quiser salvar um conjunto de dados de quadros para revisão posterior (ou para compartilhar com outra pessoa), use o botão Salvar para arquivo. O MicroProfiler salva os dados de quadro em um arquivo HTML independente chamado microprofile-<data>-<hora>.html.

No cliente desktop ou no Studio, use o menu Dump. Em ambos os casos, o MicroProfiler salva automaticamente o arquivo no diretório de logs do Roblox:
No Windows, verifique %LOCALAPPDATA%\Roblox\logs.
Se você usar o aplicativo da Plataforma Universal do Windows (UWP), verifique \Users\<nome do usuário>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\.
No macOS, verifique ~/Library/Logs/Roblox.
Perfilar o servidor
Além de perfilar o cliente, você pode capturar breves dumps da atividade do servidor:
No cliente desktop, entre em um jogo para o qual você tenha permissões de edição.
Abra o Console de Desenvolvedor com CtrlF9 (⌘F9).
No menu suspenso, selecione MicroProfiler.
Na aba Servidor, especifique o número de quadros a serem capturados (máximo 60) e o número de segundos de atraso antes de iniciar a captura (máximo 4).
Clique em Iniciar gravação do servidor.

Após alguns segundos, o Console de Desenvolvedor fornece o caminho para o arquivo, que é o mesmo caminho que um dump padrão.
Funcionalidades exclusivas da web
O MicroProfiler possui duas interfaces de usuário: a interface web (móvel e dumps) e a interface desktop (cliente e Studio). Recomendamos usar a interface web sempre que possível. Em geral, as duas funcionam de maneira semelhante, mas a interface web tem algumas funcionalidades extras:
Use o menu RAIO-X para habilitar ou desabilitar a codificação de cores para alocação de memória.

- Quadros mais claros dentro do gráfico de barras principal indicam alocação de memória mais alta.
- Porções mais claras da barra de visualização e rótulos mais claros na linha do tempo indicam partes do quadro com maior alocação de memória.
- No modo raio-x, pressione C para mostrar o tamanho total das alocações de memória em vez do número de alocações.
Use o menu Exportar para exportar um gráfico de chama de CPU ou memória, uma visualização especializada que agrega todas as pilhas de chamadas incluídas no dump, mantém a hierarquia pai-filho e as dimensiona com base na duração. Gráficos de chama são especialmente úteis para identificar tarefas que não fazem você perder suas metas de tempo de quadro (e, portanto, são difíceis de perceber), mas que são executadas com tanta frequência que seu tempo de processamento se torna significativo.

Você também pode criar gráficos de chama no Studio, embora apenas para scripts (tempo de execução e alocações de memória). Comparados aos gráficos de chama baseados na web, os do Studio são de cima para baixo em vez de de baixo para cima e suportam tempos de captura dramaticamente mais longos.

Arraste e solte um segundo arquivo de dump na interface web para gerar um gráfico de chama de diferença, que pode ajudá-lo a identificar melhorias ou regressões no desempenho do seu jogo ao longo do tempo. Clique em Combinar e Comparar para exportar um novo arquivo HTML.

O gráfico de chama de diferença destaca o dump (esquerdo ou direito) que consome mais CPU ou memória, com cores mais brilhantes indicando uma diferença maior.

Funcionalidades exclusivas de desktop
Na linha do tempo desktop, clique com o botão esquerdo em um rótulo para adicioná-lo a um gráfico no canto inferior direito. O gráfico mostra o tempo que a tarefa leva a cada quadro. Usando esse gráfico, você pode testar o desempenho de apenas certas tarefas em seu jogo. Quando terminar, clique com o botão direito no gráfico para ocultá-lo.

Este gráfico está sincronizado com as barras do profiler principal. A faixa de quadros atualmente selecionada é destacada em verde no gráfico. Você também pode clicar em qualquer lugar nesse gráfico para re-centralizar a visualização principal do profiler para aquele quadro específico, o que é útil para encontrar picos na visualização detalhada.