10 pontos por xguru 2024-07-04 | 1 comentários | Compartilhar no WhatsApp
  • Mako é uma ferramenta de build frontend baseada em Rust, "muito rápida" e "production-grade"
  • Foi lançada em 2023.3 e se tornou open source um ano depois
  • O projeto começou por causa da necessidade de uma velocidade de build "muito rápida"
  • A expressão "production-grade" é usada porque, desde 24/11/2023, o Mako foi lançado oficialmente para uso interno no Ant Group (antigo Alipay)
    • Foi validado com milhares de projetos e com diversos pacotes npm e versões usados neles

Motivos para desenvolver o Mako

  • No ano passado (2023.3), a equipe iniciou três projetos: Rust, SSR e AIG, e escolheu Rust para resolver problemas de desempenho de build
  • Os motivos para não usar ferramentas Rust existentes e decidir criar a própria foram a complexidade
    1. a maturidade das bibliotecas da comunidade e a compatibilidade com os requisitos da Ant
    2. a necessidade de ter controle (por razões de negócio, muita customização é indispensável)
    3. frameworks meta modernos exigem, além do build, um framework em tempo de compilação. Especialmente em cenários de SSR e RSC, é necessária muita compilação
    4. a necessidade de aprender Rust e de fazer a equipe evoluir
  • Linha do tempo do Mako: kickoff em 2023.3, primeira versão utilizável em 2023.7, lançamento interno na Ant em 2023.11 e open source em 2024.6

Velocidade

  • O Mako dedicou muito esforço à velocidade. Os dados de benchmark são os seguintes
    • O benchmark foi executado em um projeto que também testa o Turbopack, em um Mac Book Pro M2 Max
    • Inclui dimensões como tempo de cold start em dev, tempo de HMR em root node e leaf node, tempo de build de produção e tamanho do bundle JS
  • Em comparação com versões anteriores, os resultados foram os seguintes
    • Ao compilar o projeto completo do Ant Design Pro, o Webpack leva 16 segundos e o Mako 3,9 segundos, uma melhora de velocidade de 4x
    • Ao compilar o projeto completo do Ant Design Pro, o Mako oferece hot update praticamente em tempo real
    • Ao compilar o projeto Smallfish, um framework híbrido de intranet baseado em RSC, o tempo de build do projeto scaffold foi reduzido de 36,7 segundos para 1,2 segundo
  • Além disso, o Mako também tem um recurso experimental chamado SSU, que faz empacotamento e cache de dependências de forma semelhante à implementação anterior do MFSU
    • Dependendo da proporção entre código-fonte e dependências, pode haver um ganho de 10x a 50x na velocidade de hot start-up em dev

1 comentários

 
xguru 2024-07-04
Opiniões no Hacker News
  • O desempenho pode ser inferior em comparação com esbuild ou swc

    • No ecossistema JavaScript, muitas ferramentas são lentas e têm muitos bugs, então há necessidade de alternativas
    • Em comparação com ferramentas nativas, os ganhos vão diminuindo
  • Esta ferramenta oferece suporte a recursos não padronizados, o que pode criar dependência de um bundler específico

    • Projetos que funcionam sem bundler são melhores
    • É melhor usar bundlers como etapa de otimização
  • O principal recurso do Vite é aproveitar o sistema de plugins existente do rollup

    • Fico curioso se há planos para construir uma camada de compatibilidade para o ecossistema existente
    • Outras ferramentas de build também fazem isso (ex.: rspack usa plugins do webpack, farm usa plugins do vite)
  • Como havia "Rust" no título, pensei que fosse um compilador Rust para a web

    • Na verdade, é mais um bundler para JavaScript
    • Construído em Rust
  • Como não sou desenvolvedor web, fico confuso sobre o que um bundler realmente faz

    • Precisaria de informações sobre o que exatamente um bundler faz
    • Também me pergunto por que o foco tão grande em velocidade (ex.: resolução de versões de pacotes?)
  • Não sou desenvolvedor web, mas desenvolvo apps web regularmente

    • Fico me perguntando qual é o objetivo de um bundler em ciclos rápidos de desenvolvimento
    • Para que apps web carreguem rapidamente, o ideal é baixar novamente apenas as partes alteradas
    • Não fazer bundling parece melhor
  • O Rspack (ByteDance) lançou a versão 1.0

    • Também existe o Farm
    • Feito pela Ant Group
    • Há muitas ferramentas de build construídas em Rust
    • O Turbopack tem como objetivo uma reconstrução completa do bundling
    • O Rolldown parece ser uma reimplementação do rollup em Rust
  • Outro bundler JavaScript interessante baseado em Rust é o Oxid / OXC

  • Fico curioso sobre o que acontece quando chegarmos ao limite do bundling

    • Se alcançarmos desempenho na casa dos milissegundos, como no esbuild, talvez seja possível fazer trabalhos criativos
    • Seria muito interessante se cada navegador tivesse um pequeno mako em WASM ou outro bundler
    • Parece que muito esforço foi investido nisso
  • Fico me perguntando se tem relação com MakoTemplates