Padrões de avaliação de desempenho
Escreva microavaliações confiáveis usando os.clock e evite armadilhas comuns.
Padrões de avaliação de desempenho é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Por que fazer avaliações de desempenho?
As microavaliações medem o desempenho de um trecho específico de código de forma isolada. Elas ajudam a verificar se uma otimização realmente melhora a velocidade, sem depender da intuição.
Modelo básico de avaliação
Coloque o código em um laço, meça o tempo decorrido com os.clock() e divida pelo número de iterações.
local N = 1e6
local t0 = os.clock()
for i = 1, N do
-- code to benchmark
end
local elapsed = os.clock() - t0
print(("%.2f ns/op"):format(elapsed / N * 1e9))Passagem de aquecimento
Execute uma passagem de aquecimento antes de cronometrar, para permitir que o LuaJIT compile os rastros. Sem o aquecimento, a primeira execução cronometrada inclui o custo da compilação JIT.
for i = 1, 1000 do hotFunction(i) end -- warm up
local t0 = os.clock()
for i = 1, N do hotFunction(i) end
local elapsed = os.clock() - t0Como evitar a eliminação de código morto
O JIT pode otimizar e remover cálculos cujos resultados não são usados. Acumule os resultados em uma variável para manter a avaliação honesta.
local sum = 0
for i = 1, N do sum = sum + math.sin(i) end
print(sum) -- prevent eliminationComparando duas abordagens
Avalie implementações alternativas em condições idênticas. Execute-as de forma intercalada ou várias vezes para minimizar o ruído do escalonamento do OS.
local function approach1() -- ...
end
local function approach2() -- ...
end
local function bench(fn, n)
local t = os.clock()
for _ = 1, n do fn() end
return os.clock() - t
end
print("A:", bench(approach1, 1e5))
print("B:", bench(approach2, 1e5))Análise estatística
Execute a avaliação várias vezes e calcule o mínimo, o máximo e a mediana. Os valores discrepantes causados por pausas do GC ou pelo escalonamento do OS devem ser descartados.
Avaliação de memória
Meça a alocação de memória junto com o tempo.
collectgarbage("collect")
local mem0 = collectgarbage("count")
-- ... run operation ...
collectgarbage("collect")
local mem1 = collectgarbage("count")
print(("Memory delta: %.1f KB"):format(mem1 - mem0))Como evitar interferência do GC
Interrompa o GC antes de cronometrar para medir o tempo puro de computação. Retome-o depois.
collectgarbage("stop")
local t0 = os.clock()
for i = 1, N do -- ... end
print(os.clock() - t0)
collectgarbage("restart")Avaliações realistas e microavaliações
As microavaliações otimizam pequenos trechos, mas podem não refletir o desempenho no mundo real. Sempre valide as melhorias com o perfil de uma aplicação completa.
Utilitários de avaliação
Crie um utilitário reutilizável benchmark(name, fn, iters) que mostre resultados consistentes e formatados em todas as suas avaliações.
local function benchmark(name, fn, iters)
iters = iters or 1e5
for _ = 1, iters // 10 do fn() end -- warm up
local t = os.clock()
for _ = 1, iters do fn() end
local ns = (os.clock() - t) / iters * 1e9
print(("%-30s %8.1f ns/op"):format(name, ns))
endAvaliações na CI
Execute avaliações na CI para detectar regressões de desempenho. Emita um alerta se uma avaliação piorar mais do que um limite definido (por exemplo, 10%).
Pergunta sobre avaliações
Por que uma passagem de aquecimento é importante ao avaliar código LuaJIT?
Recapitulação: padrões de avaliação
Use uma passagem de aquecimento, evite a eliminação de código morto usando os resultados, faça medições com os.clock(), controle o GC e execute vários testes para obter medições estáveis. Crie um utilitário de avaliação reutilizável para manter a consistência.
Aprenda Lua com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 40
- Aulas
- 159
Perguntas Frequentes
A aula “Padrões de avaliação de desempenho” é grátis?
Sim — o texto completo de “Padrões de avaliação de desempenho” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Padrões de avaliação de desempenho”?
Escreva microavaliações confiáveis usando os.clock e evite armadilhas comuns. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Padrões de avaliação de desempenho”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visão geral da arquitetura do LuaJIT
- Escrevendo Lua compatível com JIT
- Criação de perfis com jit.p e perf
- Padrões de avaliação de desempenho