Perfilado con LuaProfiler
Instrumente el código con LuaProfiler para encontrar puntos críticos de CPU y contar llamadas.
Perfilado con LuaProfiler es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué es LuaProfiler?
LuaProfiler es un generador de perfiles basado en hooks para Lua. Registra el número de llamadas a funciones y el tiempo acumulado empleado en cada función, y genera un informe para analizar optimizaciones.
Instalación de LuaProfiler
Está disponible mediante LuaRocks: luarocks install luaprofiler. También puede incluir directamente el código fuente en su proyecto.
Inicio del generador de perfiles
Rodee el código con llamadas de inicio y detención del generador de perfiles.
local profiler = require("profiler")
profiler.start("profile.txt") -- output to file
-- ... your code ...
profiler.stop()Lectura del informe
El informe muestra: nombre de la función, número de llamadas, tiempo por llamada y tiempo total. Concéntrese en las funciones con un tiempo total elevado.
-- Example report:
-- function calls total_time avg_time
-- hotLoop 1000 0.850 s 0.850 ms
-- table.sort 200 0.120 s 0.600 ms
-- string.format 5000 0.090 s 0.018 msAnálisis de rutas de código específicas
Analice únicamente un subconjunto del código para reducir la sobrecarga y centrar el informe.
profiler.start()
doExpensiveOperation()
profiler.stop()
profiler.report("expensive_op.txt")Alternativa: generador de perfiles personalizado con debug.sethook
Construya un generador de perfiles mínimo mediante debug.sethook para recopilar el número de llamadas sin utilizar una biblioteca externa.
local counts = {}
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "n")
local name = info.name or "?"
counts[name] = (counts[name] or 0) + 1
end
end, "c")
-- ... run code ...
debug.sethook()
for name, count in pairs(counts) do
print(count, name)
endos.clock para medir el tiempo de las funciones
Mida manualmente el tiempo de funciones individuales para realizar benchmarks rápidos y específicos.
local function time(fn, ...)
local t = os.clock()
fn(...)
return os.clock() - t
end
print("myFunc took:", time(myFunc, arg1, arg2))jit.p para crear perfiles en LuaJIT
En LuaJIT, jit.p es superior a los generadores de perfiles basados en hooks para su uso en producción: genera menos sobrecarga y tiene en cuenta el JIT al realizar el muestreo.
Gráficos de llama
Genere un gráfico de llama recopilando muestras de la pila. Herramientas: lua-flameprof para PUC Lua y jit.p + FlameGraph para LuaJIT. Los gráficos de llama muestran toda la jerarquía de llamadas del uso de la CPU.
Creación de perfiles en conjuntos de pruebas
Ejecute el generador de perfiles dentro de las pruebas unitarias para detectar automáticamente las regresiones de rendimiento. Compruebe que las funciones críticas no superen un umbral de tiempo.
Cuellos de botella habituales
- Concatenación de cadenas con
..en bucles (utilice table.concat). - Uso de table.sort en tablas grandes (considere un algoritmo más rápido).
- Creación frecuente de cierres.
- Cadenas profundas de __index en metatablas.
Pregunta sobre la creación de perfiles
¿Qué muestra un informe de LuaProfiler?
Resumen: creación de perfiles con LuaProfiler
Utilice LuaProfiler o un generador de perfiles personalizado basado en debug.sethook para recopilar el número de llamadas y los tiempos. Concéntrese en las funciones con un tiempo total elevado. En LuaJIT, prefiera jit.p. Use gráficos de llama para visualizar la jerarquía de llamadas.
Preguntas frecuentes
¿La lección «Perfilado con LuaProfiler» es gratis?
Sí — el texto completo de «Perfilado con LuaProfiler» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Perfilado con LuaProfiler»?
Instrumente el código con LuaProfiler para encontrar puntos críticos de CPU y contar llamadas. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Perfilado con LuaProfiler»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La biblioteca debug en profundidad
- Depuración remota con MobDebug
- Perfilado con LuaProfiler
- Cobertura de código e instrumentación de pruebas