10 points par xguru 2024-07-04 | 1 commentaires | Partager sur WhatsApp
  • Mako est un outil de build frontend basé sur Rust, décrit comme « très rapide » et « production-grade »
  • Lancé en 2023.3, il a été open source un an plus tard
  • Le projet a démarré pour répondre à un besoin de vitesse de build « très rapide »
  • L’expression « production-grade » est utilisée parce que Mako a été officiellement déployé en interne chez Ant Group (anciennement Alipay) à partir du 24/11/2023
    • Il a été validé sur des milliers de projets, ainsi qu’avec les nombreux packages npm et versions utilisés dans ceux-ci

Pourquoi Mako a été développé

  • L’an dernier (2023.3), l’équipe a lancé trois projets autour de Rust, du SSR et de l’AIG, et a choisi Rust pour résoudre des problèmes de performance de build
  • Les raisons pour lesquelles ils ont décidé de le construire eux-mêmes plutôt que d’utiliser des outils Rust existants relèvent de la complexité
    1. Le niveau de maturité des bibliothèques de la communauté et leur compatibilité avec les exigences d’Ant
    2. La nécessité de garder le contrôle (de nombreuses personnalisations sont indispensables pour des raisons métier)
    3. Les meta-frameworks modernes nécessitent, au-delà du build, un framework au moment de la compilation. En particulier, les scénarios SSR et RSC demandent beaucoup de compilation
    4. Le besoin d’apprendre Rust et de faire progresser l’équipe
  • Chronologie de Mako : lancement en 2023.3, première version utilisable en 2023.7, déploiement interne chez Ant en 2023.11, passage en open source en 2024.6

Vitesse

  • Mako a fait l’objet de gros efforts sur la vitesse. Les données de benchmark sont les suivantes
    • Les benchmarks ont été exécutés sur un projet également utilisé pour tester Turbopack, sur un Mac Book Pro M2 Max
    • Ils couvrent notamment le temps de démarrage à froid en dev, le temps de HMR sur nœud racine et nœud feuille, le temps de build en production et la taille du bundle JS
  • Par rapport à la version précédente
    • Pour le build complet du projet Ant Design Pro, Webpack prend 16 secondes contre 3,9 secondes pour Mako, soit un gain de vitesse de 4x
    • Pour le build complet du projet Ant Design Pro, Mako offre des hot updates quasiment en temps réel
    • Pour le projet Smallfish, un framework hybride d’intranet basé sur RSC, le temps de build du projet scaffold est passé de 36,7 secondes à 1,2 seconde
  • Mako propose aussi une fonctionnalité expérimentale appelée SSU, qui réalise le packaging et la mise en cache des dépendances, de manière similaire à l’implémentation précédente de MFSU
    • Selon le ratio entre le code source et les dépendances, cela peut accélérer le démarrage à chaud en dev de 10 à 50 fois

1 commentaires

 
xguru 2024-07-04
Avis sur Hacker News
  • Les performances peuvent être inférieures à celles d’esbuild ou de swc

    • Dans l’écosystème JavaScript, beaucoup d’outils sont lents et bogués, donc il faut des alternatives
    • Face aux outils natifs, le rendement diminue progressivement
  • Cet outil prend en charge des fonctionnalités non standard, ce qui peut créer une dépendance à un bundler précis

    • Il vaut mieux avoir des projets qui fonctionnent aussi sans bundler
    • Il est préférable d’utiliser le bundler comme étape d’optimisation
  • La principale force de Vite est de s’appuyer sur le système de plugins existant de rollup

    • On se demande s’il est prévu de construire une couche de compatibilité pour l’écosystème existant
    • D’autres outils de build le font aussi (par ex. : rspack utilise des plugins webpack, farm utilise des plugins vite)
  • Comme il y a « Rust » dans le titre, je pensais que c’était un compilateur Rust pour le web

    • C’est en fait un autre bundler pour JavaScript
    • Il est construit en Rust
  • Comme je ne suis pas développeur web, je ne vois pas bien ce que fait réellement un bundler

    • Il faudrait des informations sur ce qu’est précisément un bundler
    • Je me demande pourquoi l’accent est mis sur la vitesse (par ex. : la résolution des versions de paquets ?)
  • Je ne suis pas développeur web, mais je développe régulièrement des applications web

    • Je me demande à quoi sert un bundler dans un cycle de développement rapide
    • Pour qu’une application web se charge rapidement, il vaut mieux ne retélécharger que les parties modifiées
    • Il vaut mieux ne pas faire de bundling
  • Rspack (ByteDance) a publié la version 1.0

    • Il y a aussi Farm
    • C’est créé par Ant Group
    • Il existe beaucoup d’outils de build construits en Rust
    • Turbopack vise une reconstruction complète du bundling
    • Rolldown semble être une réécriture de rollup en Rust
  • Un autre bundler JavaScript intéressant basé sur Rust est Oxid / OXC

  • Je me demande ce qui se passera quand on atteindra les limites du bundling

    • Si on arrive à des performances de l’ordre de la milliseconde, comme esbuild, on pourra faire des choses créatives
    • Ce serait très intéressant s’il y avait un petit mako en WASM ou un bundler dans chaque navigateur
    • On dirait qu’il y a eu beaucoup de travail derrière
  • Je me demande s’il y a un lien avec MakoTemplates