13 puan yazan xguru 2024-06-02 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Geliştirmenin ilk dönemlerinde derleme süresi yaklaşık 30 saniyeydi ve kabul edilebilirdi, ancak zamanla özellikler eklendikçe bu süre 1 dakika 10 saniyeye kadar çıktı
  • Uzun derleme süresi geliştirme sürecini yavaşlatıyor, yeni geliştiricilerin onboarding süresini uzatıyor ve günlük işlerde odaklanmayı zorlaştırıyordu

Hackathon ile iyileştirme denemesi

  • Ocak ayında veri toplandı, hackathon proje teklifi hazırlandı, mevcut derleme sistemi daha iyi anlaşılmaya çalışıldı ve profiling yöntemleri araştırıldı
  • Tüm derleme süreci OpenTelemetry ve Jaeger kullanılarak profillendi
    • Profiling sonucunda, derleme süresinin büyük bölümünü Webpack/Rollup çalıştırmalarının kapladığı görüldü
    • Küçük bağımlılıkların tek tek derlendiği ve bu nedenle paralel işleme için çok sayıda fırsat bulunduğu keşfedildi
    • Başlangıçta bazı yoğun işlemlerin gerekenden uzun sürdüğü ve derleme sürecinin geri kalanını geciktirdiği tespit edildi
  • Hackathon sırasında, esbuild kullanarak bundle alma süresini kısaltmaya odaklanıldı
    • Webpack/Rollup loader’ı olarak esbuild kullanılarak performans büyük ölçüde artırıldı (Rollup için %80 kısalma)
    • esbuild, Webpack/Rollup’un tamamen yerine geçen bir bundler olarak kullanılarak bundle alma süresi %90 kısaltıldı
  • Hackathon projesinin sonucunda, uzantı derleme süresi %70’ten fazla azaltılarak yaklaşık 15 saniyeye indirildi

Prodüksiyona uygulamak için yapılan çalışmalar

  • Hackathon projesinde çok sayıda geçici çözüm kullanıldığı için, bunu prodüksiyona taşımak adına gerçek çözümlerle değiştirmek gerekti
    • Webpack ve Rollup kullanımı tamamen esbuild’e geçirildi
    • Derleme süreci tek bir yerde birleştirildi
    • Grafik asset işleme sorunları çözüldü
    • TypeScript tür denetimi derleme sürecine yeniden eklendi
    • Prodüksiyon derlemeleri test edildi; boyut ve işlev karşılaştırmaları yapıldı
    • İç bağımlılıklardaki değişiklikler yansıtıldı
    • Sentry derleme adımı gibi önceki derleme sisteminin diğer yönleri yeniden oluşturuldu
    • Chrome dışındaki tarayıcılar, polyfill’ler ve mağaza bazlı derleme gereksinimleri için ek işlemler eklendi
  • Özellikle tür denetimi ve bundle boyutu optimizasyonuna odaklanan çalışmalar yapıldı

esbuild’e tür denetimi ekleme

  • tsc yavaş olduğu için, esbuild’in hızlı derleme süreciyle birlikte kullanılması zordu
  • esbuild-plugin-typecheck topluluk eklentisi kullanılarak tsc worker thread içinde çalıştırıldı ve incremental compilation kullanıldı
  • Her paket kökü için paralel tsc CLI süreçleri çalıştıran basit bir tür denetimi eklentisi şirket içinde geliştirildi
    • tsc derleme tanı mesajları, okunabilirliği artırmak için esbuild’in yerel biçimine dönüştürüldü
    • tsc --listFilesOnly bayrağı ve esbuild’in Metafile’ı kullanılarak tüm derleme girdilerinin tür denetiminden geçtiği otomatik olarak doğrulandı

Prodüksiyon bundle boyutunu iyileştirme

  • esbuild’in bundle boyutu analiz aracı kullanılarak prodüksiyon bundle’ı analiz edildi
    • UI bileşen kütüphanesinin hem ESM hem de CJS derlemelerinin bundle içine dahil edildiği sorun keşfedildi
    • İç kütüphanedeki hatalı yapılandırma düzeltilerek bundle boyutu küçültüldü (3.3MB -> 2.1MB)
    • Birden fazla entrypoint genelinde dosya boyutunun azaldığı görüldü

Etki ve sonuç

  • Prodüksiyon uygulamasının sonucunda, warm build süresi %90’dan fazla kısaltılarak yaklaşık 5 saniyeye indirildi
  • Watch modunda, TypeScript dosyası değiştiğinde 1 saniyenin altında yeniden derleme mümkün hale geldi
  • Geliştiriciler, yeni derleme sistemi sayesinde çalışma verimliliklerinin büyük ölçüde arttığı yönünde geri bildirim verdi
  • QA ekibi ve gönüllü geliştiricilerin çabaları sayesinde yeni derleme sistemine geçiş sorunsuz şekilde gerçekleşti
  • Geliştirici memnuniyeti anketinde, derleme süresinden memnuniyetsizlik oranı %97’den %5’e dramatik biçimde düştü
  • esbuild mükemmel bir araç ve hackathon projeleri bu tür işler için son derece uygun

Henüz yorum yok.

Henüz yorum yok.