10 puan yazan xguru 2024-07-04 | 1 yorum | WhatsApp'ta paylaş
  • Mako, Rust tabanlı "çok hızlı" ve "production-grade" bir frontend build aracı
  • 2023.3'te yayımlandı ve 1 yıl sonra açık kaynak oldu
  • Proje, "çok hızlı" build hızına ihtiyaç duyulduğu için başlatıldı
  • "production-grade" ifadesi, Mako'nun 2023.11.24'ten itibaren Ant Group'un (eski adıyla Alipay) içinde resmî olarak kullanıma sunulmuş olmasından geliyor
    • Binlerce proje ile bunlarda kullanılan çeşitli npm paketleri ve sürümleri üzerinden doğrulandı

Mako neden geliştirildi

  • Geçen yıl (2023.3) ekip Rust, SSR ve AIG olmak üzere 3 projeye başladı; build performansı sorununu çözmek için Rust seçildi
  • Mevcut Rust araçlarını kullanmak yerine doğrudan kendilerinin geliştirmeyi seçmesinin nedeni karmaşıklıktı
    1. Topluluk kütüphanelerinin olgunluk seviyesi ve Ant'in gereksinimleriyle uyumluluğu
    2. Kontrol sahibi olma ihtiyacı (iş gerekçeleri nedeniyle yoğun özelleştirme zorunluydu)
    3. Modern meta framework'ler, build'in ötesinde derleme zamanı framework'lerine de ihtiyaç duyuyor. Özellikle SSR ve RSC senaryolarında çok fazla derleme gerekiyor
    4. Rust öğrenme ve ekibin büyüme ihtiyacı
  • Mako'nun zaman çizelgesi: 2023.3'te kickoff, 2023.7'de ilk kullanılabilir sürüm, 2023.11'de Ant içinde dahili yayın, 2024.6'da açık kaynak

Hız

  • Mako hız için büyük çaba harcadı. Benchmark verileri şöyle
    • Benchmark, Mac Book Pro M2 Max üzerinde Turbopack'in de test edildiği projede çalıştırıldı
    • dev cold start süresi, root node ve leaf node HMR süresi, production build süresi, JS bundle boyutu gibi boyutları içeriyor
  • Önceki sürümle karşılaştırıldığında sonuçlar şöyle
    • Ant Design Pro tam proje build'inde Webpack 16 saniye, Mako 3,9 saniye; 4 kat hızlanma
    • Ant Design Pro tam proje build'inde Mako neredeyse gerçek zamanlı hot update sunuyor
    • RSC tabanlı intranet hybrid framework Smallfish projesinde, scaffold projesinin build süresi 36,7 saniyeden 1,2 saniyeye düştü
  • Ayrıca Mako'nun deneysel bir SSU özelliği de var; önceki MFSU implementasyonuna benzer şekilde bağımlılık paketleme ve caching yapıyor
    • Kaynak koda kıyasla bağımlılık oranına bağlı olarak Dev hot start-up sırasında 10 ila 50 kat hızlanma sağlayabiliyor

1 yorum

 
xguru 2024-07-04
Hacker News görüşleri
  • esbuild veya swc ile karşılaştırıldığında performansı daha düşük olabilir

    • JavaScript ekosisteminde birçok araç yavaş ve hatalı olduğundan alternatiflere ihtiyaç var
    • Yerel araçlarla karşılaştırıldığında getirisi giderek azalıyor
  • Bu araç standart dışı özellikleri destekleyerek belirli bir bundler'a bağımlılık yaratabilir

    • Bundler olmadan da çalışan projeler daha iyi
    • Bundler'ı bir optimizasyon aşaması olarak kullanmak daha iyi
  • Vite'ın ana özelliği, rollup'ın mevcut eklenti sisteminden yararlanması

    • Mevcut ekosistem için bir uyumluluk katmanı kurma planı olup olmadığını merak ediyorum
    • Diğer build araçları da bunu yapıyor (ör. rspack webpack eklentilerini, farm ise vite eklentilerini kullanıyor)
  • Başlıkta "Rust" yazdığı için bunun web için bir Rust derleyicisi olduğunu sandım

    • JavaScript için bir başka bundler'mış
    • Rust ile geliştirilmiş
  • Web geliştiricisi olmadığım için bundler'ın gerçekte ne yaptığını anlamakta zorlanıyorum

    • Bundler'ın tam olarak ne yaptığına dair bilgiye ihtiyaç var
    • Hıza neden odaklanıldığını merak ediyorum (ör. paket sürümü çözümleme?)
  • Web geliştiricisi değilim ama düzenli olarak web uygulamaları geliştiriyorum

    • Hızlı geliştirme döngülerinde bundler'ın amacının ne olduğunu merak ediyorum
    • Web uygulamalarının hızlı yüklenmesi için yalnızca değişen kısımların yeniden indirilmesi daha iyi olur
    • Bundling yapmamak daha iyi
  • Rspack (ByteDance) 1.0 sürümünü yayınladı

    • Farm da var
    • Ant Group tarafından yapılmış
    • Rust ile geliştirilmiş birçok build aracı var
    • Turbopack, bundling'in baştan sona yeniden inşasını hedefliyor
    • Rolldown, Rust tabanlı bir roll-up yeniden inşası gibi görünüyor
  • Bir diğer ilginç Rust tabanlı JavaScript bundler'ı Oxid / OXC

  • Bundling sınırına ulaşıldığında ne olacağını merak ediyorum

    • esbuild gibi ms seviyesinde performansa ulaşıldığında yaratıcı işler yapılabilir
    • Her tarayıcıda küçük bir WASM mako veya bundler olsa bu çok ilginç olurdu
    • Çok emek verilmiş gibi görünüyor
  • Bunun MakoTemplates ile ilgili olup olmadığını merak ediyorum