Script Profiler é uma ferramenta dentro da Console de Desenvolvedor que permite que você registre sessões de profilhamento de todos os scripts executando e veja seus custos de CPU com registros personalizados e configurações de exibição. Ele pode registrar todos os tipos de chamadas de função, incluindo chamadas de método, chamadas de propriedade e acessos de propriedade. Essa ferramenta é útil para identificar scripts que consomem a
Gravando Sessões de Perfil
Antes de gravar, você precisa selecionar o ambiente de gravação a partir de:
- Cliente (Padrão) — Registra scripts do lado do cliente, incluindo LocalScripts e Scripts com 0> Class.BaseScript.RunContext|RunContext0> definido como 3> Enum.RunContext.Client|Client 3>.
- Servidor — Registra scripts do lado do servidor, incluindo Scripts com RunContext definido para 0> Enum.RunContext.Server|Server0> ou 3> Enum.RunContext.Legacy|Legacy 3>. O Profiler de Script limpa todos os dados coletados do lado
Você também pode configurar as seguintes opções de gravação:
Comportamento | Opções | Padrão | Descrição |
---|---|---|---|
Frequência | 1000 vezes por segundo (1 KHz)10,000 vezes por segundo (10 KHz) | 1 Khz | A frequência de 10 KHz tem mais precisão, pois o Script Profiler pode não detectar chamadas de API que são executadas com mais frequência que a sua frequência selecionada, mas também tem um custo de desempenho mais alto. |
Comprimento da sessão | 1-minuto5-minuto10-minutoManual | Manual | A opção manual requer que você pare de gravar manualmente. |
Comportamento de Votação ao Vivo | Desligado | Desligado | Este comportamento coleta e atualiza dados de perfil a cada segundo durante uma sessão de perfil. |
Para registrar uma nova sessão de perfil:
Abra a Console de Desenvolvedor.
Expanda o menu suspenso de ferramentas para selecionar ScriptProfiler .
Expanda o menu suspenso cliente-servidor para selecionar Cliente ou Servidor .
(Opcional) Verifique a caixa de seleção Ao Vivo para habilitar o comportamento de pesquisa ao vivo.
(Opcional) Selecione Freq e Time para escolher a frequência de gravação e a duração da sessão se você não quiser usar os valores padrão.
Clique em Começar para iniciar a sessão de perfil. Se você definir uma duração, o Script Profiler exibe um contador regressivo com o tempo restante na sessão.
Clique em Parar ou aguarde até que o registro termine para exibir os dados de perfuração.
Lendo Dados de Perfil
Depois que uma sessão termina, o Script Profiler gera uma tabela mostrando quanto tempo cada chamada de função custa em tempo de CPU. A tabela classifica chamadas de função por tempo mais longo, menor tempo gasto, e permite que você pesquise por funções específicas por seu nome. Ele fornece as seguintes duas visualizações:
- Callgraph (Padrão): Categoriza e exibe chamadas de função em uma estrutura de árvore baseada em tarefas de quadro. Essa visão exibe cada categoria de tarefa como um nó sob a mesma raiz e permite que você expanda-os para ver funções. Você também pode passar o mouse sobre qualquer nó na árvore para ver informações
- Funções : Lista todas as funções sem categorizá-las por tarefas.
Você também pode selecionar nas seguintes opções de exibição para ajustar suas necessidades de diagnóstico:
Nome | Opções | Padrão | Descrição |
---|---|---|---|
Unidade | Milissegundos (ms)Percentagem (%) | senhoras | Exibe o tempo gasto em cada chamada de API em milisegundos ou porcentagens da sessão de gravação total. |
Médio | Off1-segund1-minuto5-minuto10-minuto | Desligado | Calcula o tempo médio gasto em cada chamada de API pelo valor selecionado. Se você selecionar uma opção que é maior que a duração da sessão, o profilador de script extrapola a duração da sessão para calcular o valor médio. Por exemplo, você pode selecionar a opção de 5 minutos para uma sessão de 1 minuto para ver o valor esperado médio se você executar o código por 5 minutos. |
Exportando Dados de Perfil
O Script Profiler permite que você exporte dados de profilamento registrados como um arquivo JSON. Para exportar dados registrados depois de uma sessão de profilamento:
Na janela Script Profiler, clique em Exportar .
Na janela de exportação, selecione a sessão de perfil que você deseja exportar. Rename o nome do arquivo padrão se você quiser definir um nome personalizado.
Clique em Exportar para salvar o arquivo JSON.
O arquivo JSON exportado inclui os seguintes campos:
- Versão : O número de versão.
- SessionStartTime : Um timestamp em milisegundos que registra a sessão começar tempo.
- TimeEndTime : Um timestamp em milisegundos que registra o tempo de fim da sessão.
- Categorias : Um array de categorias de tarefa de quadro registradas na sessão de perfuração. Cada entrada inclui:
- Nome : O nome de cada categoria de tarefa de quadro.
- NodeId : O identificador exclusivo de uma categoria de tarefa (nó). É um índice de 1 baseado no arranjo Nodes. Por exemplo, você pode pesquisar o nó com o NodeId de 0> 1230> ao recuperar o elemento 3> 123 3> .
- Nós : Um array de nós registrados na sessão de perfuração. Cada entrada inclui:
- Duração Total : A quantidade de tempo que o nódeo leva em tempo em microsegundos.
- FunctionIds : Um array de identificadores de funções exclusivos.
- IDs de Nódoas : Um array de IDs de Nódoas.
- Funções : Um array de funções registradas na sessão de perfuração.
- Duração Total : A quantidade de tempo que a função gasta em tempo de CPU em microsegundos.
- Nome : O nome da função, se disponível.
- Fonte : A fonte da função, se disponível.
- Linha : O número de linha da função, se houver.
- Bandeiras : Um pouco de campo que indica qualquer ambiente de execução de função específica. Atualmente pode ter os seguintes valores:
- 0 : O 0th bit representa IsNative para execução sob o Código Nativo.
- 1 : O primeiro bit representa IsPlugin para a execução como parte de um plugin.
Exemplo de Dados de Perfil Exportados
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"Script","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}