---
title: "Cold start sub-segundo no FastAPI: o padrão LazyRouter"
description: "Importar 70 routers no startup do FastAPI custa caro. O LazyRouter atrasa o import até o primeiro hit e derruba o cold start pra perto de 300ms."
author: "Anderson Henrique"
date: "2026-04-28T10:15:00Z"
updated: "2026-05-12T14:05:04.351982Z"
category: "technical"
tags: ["fastapi","python","performance","cold-start","arquitetura"]
canonical: "https://www.ntlabs.dev/blog/fastapi-cold-start-lazy-router"
locale: "pt"
---

Nosso backend tem mais de 460 endpoints distribuídos em 70 routers — autenticação, billing, conteúdo, integração com Stripe, RAG, transcrição médica, e por aí vai. No começo importávamos todos no main.py de forma direta: app.include_router(auth_router), app.include_router(billing_router), e assim sucessivamente. Funcionava. Mas o cold start passou de 800ms e a primeira request depois de um deploy ficava lenta.

O diagnóstico foi simples: cada import puxa modelos Pydantic, dependências do SQLAlchemy, clientes externos. Mesmo que o request inicial fosse pra /health, o Python já tinha pago o custo de carregar tudo.

A solução foi o que chamamos internamente de LazyRouter. Em vez de importar o módulo no topo, registramos só um path e uma função lazy que faz o import na primeira chamada. O registro acontece num registry.py central, onde cada linha é uma entrada do tipo "este path resolve para este módulo, importado sob demanda".

O efeito foi imediato: cold start caiu de 800ms para cerca de 300ms. O primeiro hit num router específico paga um pequeno overhead de import (5-30ms), mas o segundo já está cached. E na prática isso é invisível — o health check do Railway responde rápido, o gate de saúde libera tráfego cedo, e os usuários reais nunca tocam um endpoint sem que ele já tenha sido importado por algum hit anterior.

A lição que ficou: importar é uma operação cara em Python, e o startup de um app FastAPI grande sente isso de forma desproporcional. Atrasar o que pode ser atrasado libera o caminho crítico. Não é um truque — é só respeitar o custo real de cada linha de import.
