Initializing, please wait a moment

Como minificar CSS / JS para ganhos de cold-start no Cloud Run


O tempo de cold-start no Google Cloud Run, AWS Lambda, Cloudflare Workers e plataformas serverless similares e dominado por duas coisas: o custo de rede para enviar seu codigo ao runtime, e o tempo que o runtime gasta fazendo parse. Minificar CSS e JavaScript reduz diretamente os dois. Para um servico Cloud Run tipico voltado a web, cortar 40% do bundle JS se traduz em ~100 ms a menos no caminho de cold-start. Este guia cobre as receitas de build-step exatas que funcionam nos principais runtimes, com numeros antes/depois medidos.


Por que minificacao especificamente ajuda no cold-start

Transferencia de rede. Plataformas serverless puxam sua container image ou bundle para o runtime no cold start. Bundle menor → pull mais rapido. No Cloud Run, o pull de layer de container image pode ser a maior contribuicao individual para cold-start em um servico pequeno (~300 ms para uma image de 50 MB). Cloudflare Workers tem um cap de 1 MB no free tier e 10 MB no pago - minificacao frequentemente e a diferenca entre caber e nao caber.

Tempo de parse. V8 (Node / Workers / Deno) faz parse do JavaScript uma vez por isolate. JS minificado tem menos tokens, menos espacos em branco, e identificadores mais curtos - V8 faz parse ~30% mais rapido. Parse e uma operacao sincrona que bloqueia a primeira requisicao; no cold start e a diferenca entre 120 ms e 160 ms em um bundle de 500 KB.

Eficiencia de compressao. JS minificado comprime melhor sob gzip/brotli porque espaco em branco repetido e comentarios nao consomem o dicionario do compressor. Economias na rede sao ~15-25% alem de unminified+gzip.


Minifique online para uma verificacao pontual

Para um unico arquivo ou uma medicao rapida antes/depois, cole nas nossas ferramentas de navegador:

Estes rodam no navegador - nada e enviado. Util para medir um arquivo especifico ou verificar a forma comprimida de um SDK de terceiros.


Minifique no build step (a resposta de producao real)

Para um servico real, minificacao e um build-step, nao uma colagem pontual. Tres configuracoes comuns:

esbuild (mais rapido; padrao para a maioria das stacks modernas).

npx esbuild src/index.ts \
  --bundle \
  --minify \
  --target=node20 \
  --platform=node \
  --outfile=dist/index.js

A flag --minify do esbuild faz renomeacao de identificadores, eliminacao de dead-code, e remocao de espacos em branco. Adicione --tree-shaking=true (padrao quando empacotando) para dropar exports nao referenciados. Apenas minificar (sem bundle) via npx esbuild in.js --minify > out.js.

Terser (maduro; produz a menor saida JS).

npx terser dist/index.js \
  -o dist/index.min.js \
  -c passes=3,pure_getters,unsafe_arrows=true \
  -m toplevel=true \
  --source-map content=inline,url=dist/index.min.js.map

Tres passes de compressao + top-level mangling + unsafe_arrows (converte expressoes de funcao nomeadas em arrow functions onde equivalente) pode cortar mais 5-10% vs esbuild. Mais lento para rodar - use em builds finais de producao apenas.

cssnano / lightningcss para CSS.

npx lightningcss \
  --minify \
  --targets ">= 0.25%" \
  src/app.css -o dist/app.css

lightningcss combina transpilacao (autoprefixer) e minificacao em um passo; baseado em Rust, ~20× mais rapido que postcss+cssnano.


Flags especificas de runtime

Cloud Run (baseado em container). A principal alavanca e o tamanho da container image. Use um Dockerfile multi-stage: construa o bundle em um stage builder Node, depois copie a saida minificada para um stage runtime distroless. Pule source maps em producao. Alvo: imagens de 20-50 MB.

AWS Lambda. Lambda layers enviam unminified para debuggability, o handler envia minificado. O limite de 50 MB zipado / 250 MB descompactado raramente trava em servicos JS, mas o custo de parse de cold-start ainda se beneficia da minificacao.

Cloudflare Workers. O cap de bundle de 1 MB (free) / 10 MB (pago) frequentemente forca minificacao. Workers usa V8 isolates; minificacao corta tanto o transfer quanto os steps de parse. Use a config esbuild built-in do wrangler: wrangler deploy --minify.

Deno Deploy / Vercel Edge. Similar ao Cloudflare Workers - V8 isolate, sensivel ao tamanho de bundle. Ambos rodam esbuild internamente com --minify por padrao.


Impacto medido - servico web tipico

Um servico Cloud Run de exemplo (Node 20, Express, 300 KB bundle JS unminified, 50 KB CSS) antes/depois de minificacao:

MetricaUnminifiedMinificadoDelta
Tamanho do bundle JS300 KB160 KB-47%
JS gzipado95 KB65 KB-32%
Cold-start (p50)680 ms580 ms-100 ms
Cold-start (p95)1200 ms990 ms-210 ms
Requisicao quente (p50)18 ms17 ms-1 ms (ruido)

Minificacao ajuda cold-start desproporcionalmente - requisicoes quentes nao re-fazem parse do bundle, entao as economias se concentram em invocacoes frias. Para um servico que ve trafego estavel, o ganho de cold-start e sutil; para um servico esparso ou de baixo trafego, o ganho e significativo.


O que NAO fazer

Nao envie unminified e dependa do gzip. Gzip ajuda mas nao toca no tempo de parse. Minifique primeiro, depois comprima.

Nao minifique scripts inline em HTML em tempo de execucao. Minifique no build. Minificacao em runtime queima CPU em cada requisicao.

Nao remova source maps em desenvolvimento. Stack traces de erro ficam ilegiveis. Envie maps como arquivos .map separados, excluidos do bundle, servidos com o header HTTP SourceMap apenas quando solicitado.

Nao use flags unsafe de minifier em codigo de SDK de terceiros. Alguns SDKs (Sentry, Stripe.js) dependem de introspeccao de nome de funcao especifica; mangling agressivo os quebra. Mantenha bundles de vendors sem mangling.


Ferramentas relacionadas


← Voltar para Developer Tools

Why trust these tools

  • Ten-plus years of web tooling. The freetoolonline editorial team has shipped browser-based utilities since 2015. The goal has never changed: get you to a working output fast, without an install.
  • Truly in-browser - no upload. Every file-processing tool on this site runs in your browser through modern Web APIs (File, FileReader, Canvas, Web Audio, WebGL, Web Workers). Your photo, PDF, audio, or text never leaves your device.
  • No tracking during tool use. Analytics ends at the page view. The actual input you paste, drop, or capture is never sent to any server and never written to any log.
  • Open-source core components. The processing engines underneath (libheif, libde265, pdf-lib, terser, clean-css, ffmpeg.wasm, and others) are public and audit-able. We link to each one in its tool page's footer.
  • Free, with or without ads. All tools are fully functional without sign-up. The Disable Ads button in the header is always available if you need a distraction-free run.