Script Profiler es una herramienta dentro de la Developer Console que le permite grabar sesiones de perfilado de todos los scripts en ejecución y ver sus costos de tiempo de CPU con configuraciones de grabación y visualización personalizadas. Puede grabar todo tipo de llamadas de función, incluidas funciones de Luau, llamadas de método y accesos a propiedades. Esta herramienta es útil para identificar scripts que consumen la mayoría de los recursos de CPU y ralentizan el rendimiento.
Grabando Sesiones de Perfil
Antes de grabar, debe seleccionar el entorno de grabación de:
- Cliente (Por Defecto) Registra scripts del lado del cliente, incluyendo LocalScripts y Scripts con RunContext establecido como Client .
- Servidor Registra scripts del lado del servidor, incluyendo Scripts con RunContext establecido en Server o Legacy. El perfilador de scripts borra todos los datos recopilados del lado del servidor al final de cada sesión.
También puedes establecer las siguientes opciones de grabación:
Comportamiento | Opciones | Por defecto | Descripción |
---|---|---|---|
Frecuencia | 1000 veces por segundo (1 KHz) 10.000 veces por segundo (10 KHz) | 1 kilociclo | La frecuencia de 10 KHz tiene una mayor precisión, ya que Script Profiler puede no recibir llamadas API que se ejecuten con más frecuencia que la frecuencia seleccionada, pero también tiene un mayor costo de rendimiento. |
Duración de la sesión | 1 minuto 5 minutos 10 minutos Manual | Manual | La opción manual requiere que dejes de grabar manualmente. |
Comportamiento de votación en vivo | Encendido Apagado | Apagado | Este comportamiento realiza encuestas y actualiza los datos de perfil cada segundo durante una sesión de perfil. |
Para grabar una nueva sesión de creación de perfiles:
Abre Consola de Desarrollador .
Expande el menú desplegable de herramientas para seleccionar ScriptProfiler .
Expande el menú desplegable cliente-servidor para seleccionar Cliente o Servidor .
(Opcional) Marque la casilla de verificación Live para habilitar el comportamiento de votación en vivo.
(Opcional) Seleccione Freq y Time para elegir la frecuencia de grabación y la duración de la sesión si no desea usar los valores predeterminados.
Haga clic en Iniciar para comenzar la sesión de creación de perfiles. Si establece una duración, Script Profiler muestra un temporizador de cuenta regresiva con el tiempo restante en la sesión.
Haga clic en Detener o espere hasta que finalice la grabación para ver los datos de perfil.
Leyendo datos de perfil
Después de que una sesión se detenga, Script Profiler genera una tabla que muestra cuánto tiempo cuesta cada llamada de función en tiempo de CPU. La tabla clasifica las llamadas de función desde la más gastada hasta la menos gastada, y le permite buscar funciones específicas por su nombre. Proporciona las siguientes dos vistas:
- Callgraph (Por Defecto): Categoriza y muestra las llamadas a funciones en una estructura de árbol basada en tareas de marco. Esta vista muestra cada categoría de tarea como nodos bajo la misma raíz y le permite expandirlos para ver funciones. También puede pasar el cursor sobre cualquier nodo en el árbol para ver información de archivos y líneas. Por ejemplo, Stepped/CameraInput/<anonymous> podría revelar Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 .
- Funciones : Enumera todas las funciones sin categorizarlas por tareas.
También puede seleccionar entre las siguientes opciones de visualización para adaptar sus necesidades de depuración:
Nombre | Opciones | Por defecto | Descripción |
---|---|---|---|
Unidad | Millisegundos (ms) Porcentaje (%) | ms | Muestra el tiempo transcurrido en cada llamada de API en milisegundos o porcentajes de la sesión de grabación total. |
Promedio | Apagado 1 segundo 1 minuto 5 minutos 10 minutos | Apagado | Calcula el tiempo promedio gastado en cada llamada de API por el valor seleccionado. Si selecciona una opción que es más larga que la duración de la sesión, el perfilador de scripts extrapolará la duración de la sesión para calcular el promedio. Por ejemplo, puede seleccionar la opción de 5 minutos para una sesión de 1 minuto para ver el valor promedio esperado si ejecuta el código durante 5 minutos. |
Exportando datos de perfil
Script Profiler le permite exportar los datos de perfilados grabados como un archivo JSON. Para exportar los datos grabados después de una sesión de perfilado:
En la ventana de Script Profiler, haga clic en Exportar .
En la ventana de exportación, seleccione la sesión de perfilado que desea exportar. Renombrar el nombre del archivo predeterminado si desea establecer un nombre personalizado.
Haga clic Exportar para guardar el archivo JSON.
El archivo JSON exportado incluye los siguientes campos:
- Versión : El número de la versión.
- SessionStartTime : Una marca de tiempo en milisegundos que registra la hora de inicio de la sesión.
- SessionEndTime : Una marca de tiempo en milisegundos que registra la hora de final de la sesión.
- Categorías : Una variedad de categorías de tareas de marco grabadas en la sesión de elaboración de perfiles. Cada entrada incluye:
- Nombre : El nombre de cada categoría de tarea de marco.
- NodeId : El identificador único de una categoría de tareas (nodo). Es un índice basado en 1 en el conjunto Nodes. Por ejemplo, puede buscar el nodo con el NodeId de 123 recuperando el elemento 123 en Nodes .
- Nodos : Un conjunto de nodos registrados en la sesión de creación de perfiles. Cada entrada incluye:
- TotalDuration : La cantidad de tiempo que el nodo gasta en tiempo de CPU en microsegundos.
- FunctionIds : Un conjunto de identificadores únicos de funciones.
- NodeIds : Un conjunto de ID de nodo.
- Funciones : Una variedad de funciones grabadas en la sesión de elaboración de perfiles.
- TotalDuration : La cantidad de tiempo que la función cuesta en tiempo de CPU en microsegundos.
- Nombre : El nombre de la función, si está disponible.
- Fuente : La fuente de la función, si está disponible.
- Línea : El número de línea de la función, si está disponible.
- Banderas : Un campo de bits que indica cualquier entorno, ambientede ejecución de función específica. Actualmente puede tener los siguientes valores:
- 0 : El 0o bit representa IsNative para la ejecución bajo Native CodeGen.
- 1 : El primer bit representa IsPlugin para la ejecución como parte de un complemento.
Ejemplo de datos 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}
]
}