Skip to content
Latchkey

O Que É um Build Cache?

Um build cache lembra o que cada etapa de build produziu, então se as entradas não mudaram a ferramenta reutiliza o resultado em vez de reconstruí-lo.

Compiladores e ferramentas de build fazem muito trabalho repetitivo: os mesmos arquivos de origem produzem os mesmos arquivos objeto até que mudem. Um build cache armazena essas saídas intermediárias e finais indexadas pelas suas entradas, transformando um rebuild em uma consulta.

Build cache vs cache de dependências

Um cache de dependências armazena pacotes de terceiros que você baixou. Um build cache armazena os artifacts que o seu próprio build produziu - objetos compilados, bundles transpilados, saídas de tasks. Eles resolvem custos diferentes e frequentemente rodam juntos.

Como ele decide o que reutilizar

A ferramenta faz o hash das entradas de uma etapa (arquivos de origem, flags, versão da ferramenta, dependências). Se um hash correspondente existir no cache, ela puxa a saída armazenada em vez de executar a etapa. Este é o mecanismo por trás de ferramentas como Gradle, Bazel, Turborepo e sccache.

Um pequeno exemplo

Com o sccache envolvendo o seu compilador, o primeiro build de um arquivo calcula e armazena um objeto indexado pela origem e pelas flags. Um build posterior com as mesmas entradas busca esse objeto em vez de recompilar - frequentemente transformando um rebuild de vários minutos em segundos.

Local vs remoto

Um build cache local vive na mesma máquina; em runners de CI efêmeros essa máquina desaparece após o job. Um build cache remoto permite que muitas execuções e máquinas compartilhem resultados, o que é o que faz o caching compensar no CI.

A correção depende das entradas

Um build cache só é seguro se as suas keys capturam toda entrada que afeta a saída. Esquecer uma (uma env var, uma flag de compilador) produz artifacts obsoletos ou errados - o clássico bug de caching "funciona localmente, quebrado no CI".

Principais conclusões

  • Um build cache reutiliza as suas próprias saídas de build, indexadas pelas suas entradas.
  • Ele é distinto de um cache de dependências, embora frequentemente andem juntos.
  • Build caches remotos são o que torna o caching útil em runners efêmeros.

Guias relacionados