10 puntos por xguru 2024-07-04 | 1 comentarios | Compartir por WhatsApp
  • Mako es una herramienta de build frontend basada en Rust, "muy rápida" y "production-grade"
  • Se lanzó en 2023.3 y se volvió de código abierto un año después
  • El proyecto comenzó por la necesidad de una velocidad de build "muy rápida"
  • La expresión "production-grade" se usa porque, desde el 24.11.2023, Mako fue lanzado oficialmente de forma interna en Ant Group (antes Alipay)
    • Ha sido validado con miles de proyectos y con diversos paquetes npm y versiones usados en ellos

Razones para desarrollar Mako

  • El año pasado (2023.3), el equipo inició tres proyectos: Rust, SSR y AIG, y eligió Rust para resolver problemas de rendimiento en el build
  • Las razones para no usar herramientas Rust existentes y crear una propia fueron la complejidad
    1. La madurez de las librerías de la comunidad y su compatibilidad con los requisitos de Ant
    2. La necesidad de tener control (por razones de negocio, era indispensable mucha personalización)
    3. Los meta-frameworks modernos necesitan, además del build, un framework en tiempo de compilación. En especial, se requiere mucha compilación en escenarios de SSR y RSC
    4. La necesidad de aprender Rust y de que el equipo creciera
  • Cronología de Mako: kickoff en 2023.3, primera versión utilizable en 2023.7, lanzamiento interno en Ant en 2023.11 y código abierto en 2024.6

Velocidad

  • Mako ha dedicado mucho esfuerzo a la velocidad. Los datos de benchmark son los siguientes
    • El benchmark se ejecutó en un proyecto donde también se prueba Turbopack, sobre una Mac Book Pro M2 Max
    • Incluye dimensiones como tiempo de dev cold start, tiempo de HMR en nodo raíz y nodo hoja, tiempo de build de producción y tamaño del bundle JS
  • En comparación con la versión anterior, ocurre lo siguiente
    • Al compilar el proyecto completo de Ant Design Pro, Webpack tarda 16 segundos y Mako 3.9 segundos, una mejora de 4 veces en velocidad
    • Al compilar el proyecto completo de Ant Design Pro, Mako ofrece hot update casi en tiempo real
    • Al compilar Smallfish, un framework híbrido de intranet basado en RSC, el tiempo de build del proyecto scaffold se redujo de 36.7 segundos a 1.2 segundos
  • Además, Mako también tiene una función experimental llamada SSU, que realiza empaquetado y caché de dependencias de forma similar a la implementación anterior de MFSU
    • Dependiendo de la proporción de dependencias frente al código fuente, puede acelerar el hot start-up en desarrollo entre 10 y 50 veces

1 comentarios

 
xguru 2024-07-04
Opiniones en Hacker News
  • Puede tener un rendimiento inferior en comparación con esbuild o swc

    • En el ecosistema de JavaScript, muchas herramientas son lentas y tienen muchos errores, así que se necesitan alternativas
    • En comparación con las herramientas nativas, el rendimiento marginal va disminuyendo
  • Esta herramienta soporta funciones no estándar, lo que puede generar dependencia de un bundler específico

    • Es mejor que los proyectos funcionen incluso sin bundler
    • Conviene usar el bundler como una etapa de optimización
  • La función principal de Vite es aprovechar el sistema de plugins existente de rollup

    • Me pregunto si hay planes de construir una capa de compatibilidad para el ecosistema existente
    • Otras herramientas de build también están haciendo esto (por ejemplo: rspack usa plugins de webpack, farm usa plugins de vite)
  • Como el título tenía "Rust", pensé que era un compilador de Rust para la web

    • En realidad es otro bundler para JavaScript
    • Está construido con Rust
  • Como no soy desarrollador web, me confunde qué hace realmente un bundler

    • Hace falta información sobre qué hace exactamente un bundler
    • Me pregunto por qué se pone tanto énfasis en la velocidad (por ejemplo, ¿resolución de versiones de paquetes?)
  • No soy desarrollador web, pero desarrollo aplicaciones web con regularidad

    • Me pregunto cuál es el propósito de un bundler en ciclos de desarrollo rápidos
    • Para que una app web cargue rápido, es mejor volver a descargar solo las partes modificadas
    • Es mejor no hacer bundling
  • Rspack (ByteDance) lanzó la versión 1.0

    • También está Farm
    • Fue hecho por Ant Group
    • Hay muchas herramientas de build construidas con Rust
    • Turbopack apunta a una reconstrucción completa del bundling
    • Rolldown parece ser una reimplementación de rollup basada en Rust
  • Otro bundler de JavaScript basado en Rust interesante es Oxid / OXC

  • Me pregunto qué pasará cuando lleguemos al límite del bundling

    • Si se alcanza un rendimiento de milisegundos como esbuild, sería posible hacer cosas creativas
    • Sería muy interesante si hubiera un pequeño WASM de mako o un bundler en cada navegador
    • Parece que se ha invertido mucho esfuerzo
  • Me pregunto si está relacionado con MakoTemplates