Lua Academy · Aula

Padrões de avaliação de desempenho

Escreva microavaliações confiáveis usando os.clock e evite armadilhas comuns.

Aula 4 de 413 etapas

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() - t0

Como 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 elimination

Comparando 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))
end

Avaliaçõ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.

Grátis para começar

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

  1. Visão geral da arquitetura do LuaJIT
  2. Escrevendo Lua compatível com JIT
  3. Criação de perfis com jit.p e perf
  4. Padrões de avaliação de desempenho
← Voltar para Lua Academy