10 Punkte von xguru 2024-07-04 | 1 Kommentare | Auf WhatsApp teilen
  • Mako ist ein auf Rust basierendes Frontend-Build-Tool, das "sehr schnell" und "production-grade" ist
  • Veröffentlicht wurde es im März 2023 und nach einem Jahr als Open Source freigegeben
  • Das Projekt wurde gestartet, weil eine "sehr schnelle" Build-Geschwindigkeit benötigt wurde
  • Der Ausdruck "production-grade" wird verwendet, weil Mako seit dem 24.11.2023 intern bei Ant Group (früher Alipay) offiziell ausgerollt ist
    • Es wurde anhand von Tausenden Projekten sowie den darin verwendeten unterschiedlichen npm-Paketen und Versionen validiert

Warum Mako entwickelt wurde

  • Im vergangenen Jahr (März 2023) startete das Team drei Projekte zu Rust, SSR und AIG und entschied sich für Rust, um Probleme mit der Build-Performance zu lösen
  • Gründe dafür, nicht auf bestehende Rust-Tools zu setzen, sondern selbst etwas zu bauen, waren die Komplexität und folgende Punkte
    1. der Reifegrad von Community-Bibliotheken und ihre Kompatibilität mit den Anforderungen von Ant
    2. die Notwendigkeit, Kontrolle zu behalten (aus geschäftlichen Gründen ist umfangreiche Anpassung zwingend erforderlich)
    3. moderne Meta-Frameworks benötigen neben dem Build auch Frameworks zur Compile-Zeit. Besonders in SSR- und RSC-Szenarien ist viel Kompilierung erforderlich
    4. die Notwendigkeit, Rust zu lernen und das Team weiterzuentwickeln
  • Zeitachse von Mako: Kickoff im März 2023, erste nutzbare Version im Juli 2023, interner Rollout bei Ant im November 2023, Open-Source-Freigabe im Juni 2024

Geschwindigkeit

  • In die Geschwindigkeit von Mako wurde viel Aufwand investiert. Die Benchmark-Daten sind wie folgt
    • Die Benchmarks wurden auf einem Projekt ausgeführt, das auch mit Turbopack auf einem Mac Book Pro M2 Max getestet wird
    • Berücksichtigt wurden unter anderem dev cold start-Zeit, HMR-Zeit für Root-Node und Leaf-Node, Build-Zeit für den Production-Build sowie die Größe des JS-Bundles
  • Im Vergleich zur vorherigen Version ergibt sich Folgendes
    • Beim Build des vollständigen Projekts Ant Design Pro benötigt Webpack 16 Sekunden, Mako 3,9 Sekunden – also eine 4-fache Beschleunigung
    • Beim Build des vollständigen Projekts Ant Design Pro liefert Mako nahezu Echtzeit-Hot-Updates
    • Beim Build des Smallfish-Projekts, eines RSC-basierten Intranet-Hybrid-Frameworks, wurde die Build-Zeit des Scaffold-Projekts von 36,7 Sekunden auf 1,2 Sekunden verkürzt
  • Außerdem verfügt Mako über eine experimentelle SSU-Funktion, die ähnlich wie die frühere MFSU-Implementierung das Packaging und Caching von Abhängigkeiten übernimmt
    • Je nach Verhältnis von Abhängigkeiten zum Source Code kann dies den Dev-Hot-Start um das 10- bis 50-Fache beschleunigen

1 Kommentare

 
xguru 2024-07-04
Hacker-News-Kommentare
  • Im Vergleich zu esbuild oder swc könnte die Performance schlechter sein

    • Im JavaScript-Ökosystem sind viele Tools langsam und fehleranfällig, daher werden Alternativen benötigt
    • Im Vergleich zu nativen Tools nimmt der Nutzen zunehmend ab
  • Dieses Tool unterstützt nicht standardisierte Funktionen und könnte zu einer Abhängigkeit von einem bestimmten Bundler führen

    • Projekte, die auch ohne Bundler funktionieren, sind besser
    • Bundler sollten besser als Optimierungsschritt eingesetzt werden
  • Die Hauptstärke von Vite besteht darin, das bestehende Plugin-System von rollup zu nutzen

    • Ich frage mich, ob geplant ist, eine Kompatibilitätsschicht für das bestehende Ökosystem aufzubauen
    • Andere Build-Tools tun dies ebenfalls (z. B. verwendet rspack webpack-Plugins, farm verwendet vite-Plugins)
  • Wegen des Wortes "Rust" im Titel dachte ich, es handle sich um einen Rust-Compiler für das Web

    • Es ist ein weiterer Bundler für JavaScript
    • Er ist in Rust gebaut
  • Da ich kein Webentwickler bin, bin ich verwirrt darüber, was ein Bundler eigentlich macht

    • Ich brauche Informationen darüber, was ein Bundler genau tut
    • Ich frage mich, warum so viel Wert auf Geschwindigkeit gelegt wird (z. B. Auflösung von Paketversionen?)
  • Ich bin kein Webentwickler, entwickle aber regelmäßig Web-Apps

    • Ich frage mich, was in schnellen Entwicklungszyklen der Zweck eines Bundlers ist
    • Damit Web-Apps schnell laden, ist es besser, nur die geänderten Teile erneut herunterzuladen
    • Nicht zu bündeln ist besser
  • Rspack (ByteDance) hat Version 1.0 veröffentlicht

    • Es gibt auch Farm
    • Es wurde von der Ant Group entwickelt
    • Es gibt viele in Rust entwickelte Build-Tools
    • Turbopack zielt auf einen vollständigen Neuaufbau des Bundlings ab
    • Rolldown scheint ein auf Rust basierender Neuaufbau von roll-up zu sein
  • Ein weiterer interessanter Rust-basierter JavaScript-Bundler ist Oxid / OXC

  • Ich frage mich, was passiert, wenn wir an die Grenzen des Bundlings stoßen

    • Wenn eine Performance im Millisekundenbereich wie bei esbuild erreicht wird, könnte man kreative Dinge tun
    • Wenn es in jedem Browser ein kleines WASM-mako oder einen Bundler gäbe, wäre das sehr interessant
    • Es scheint, als sei viel Arbeit hineingeflossen
  • Ich frage mich, ob es mit MakoTemplates zusammenhängt