13 poin oleh xguru 2024-06-02 | Belum ada komentar. | Bagikan ke WhatsApp
  • Pada awal pengembangan, waktu build sekitar 30 detik dan masih cukup baik, tetapi seiring bertambahnya fitur, waktu build meningkat hingga 1 menit 10 detik
  • Waktu build yang panjang memperlambat proses pengembangan, menambah waktu onboarding developer baru, dan membuat sulit untuk tetap fokus dalam pekerjaan sehari-hari

Upaya perbaikan melalui hackathon

  • Pada bulan Januari, tim mengumpulkan data, menulis proposal proyek hackathon, memperdalam pemahaman terhadap sistem build yang ada, dan mencari cara untuk melakukan profiling
  • Seluruh proses build diprofilkan menggunakan OpenTelemetry dan Jaeger
    • Hasil profiling menunjukkan bahwa eksekusi Webpack/Rollup memakan sebagian besar waktu build
    • Ditemukan banyak peluang untuk pemrosesan paralel karena dependensi-dependensi kecil dibangun satu per satu
    • Juga ditemukan bahwa pada tahap awal, beberapa pekerjaan yang intensif berjalan lebih lama dari yang diperlukan dan menunda sisa proses build
  • Selama periode hackathon, fokus diarahkan pada pemangkasan waktu bundling dengan memanfaatkan esbuild
    • Menggunakan esbuild sebagai loader untuk Webpack/Rollup memberikan peningkatan performa yang besar (untuk Rollup, berkurang 80%)
    • Menggunakan esbuild sebagai bundler yang sepenuhnya menggantikan Webpack/Rollup memangkas waktu bundling hingga 90%
  • Hasil proyek hackathon ini berhasil memangkas waktu build ekstensi lebih dari 70%, menjadi sekitar 15 detik

Pekerjaan untuk penerapan ke production

  • Karena proyek hackathon banyak memakai solusi sementara, penerapan ke production memerlukan penggantian dengan solusi yang benar-benar siap pakai
    • Sepenuhnya beralih dari Webpack dan Rollup ke esbuild
    • Menyatukan proses build ke satu lokasi
    • Menyelesaikan masalah pemrosesan aset grafis
    • Menambahkan kembali pemeriksaan tipe TypeScript ke dalam proses build
    • Menguji build production serta membandingkan ukuran dan fungsinya
    • Mencerminkan perubahan pada dependensi internal
    • Mereproduksi aspek lain dari sistem build sebelumnya, seperti tahap build Sentry
    • Menambahkan penanganan untuk browser non-Chrome, polyfill, dan kebutuhan build spesifik tiap store
  • Pekerjaan difokuskan terutama pada pemeriksaan tipe dan optimalisasi ukuran bundle

Menambahkan pemeriksaan tipe ke esbuild

  • Karena tsc lambat, sulit menggunakannya bersama proses build cepat dari esbuild
  • Tim menggunakan plugin komunitas esbuild-plugin-typecheck untuk menjalankan tsc di worker thread dan memanfaatkan incremental compilation
  • Tim juga mengimplementasikan plugin pemeriksaan tipe sederhana buatan sendiri untuk menjalankan proses CLI tsc secara paralel pada setiap root package
    • Pesan diagnostik kompilasi tsc diubah ke format native esbuild agar lebih mudah dibaca
    • Dengan memanfaatkan flag tsc --listFilesOnly dan Metafile dari esbuild, tim dapat memverifikasi secara otomatis bahwa semua input build sudah diperiksa tipenya

Peningkatan ukuran bundle production

  • Bundle production dianalisis menggunakan penganalisis ukuran bundle milik esbuild
    • Ditemukan masalah bahwa build ESM dan CJS dari library komponen UI sama-sama ikut dimasukkan ke dalam bundle
    • Konfigurasi yang salah pada library internal diperbaiki sehingga ukuran bundle menyusut (3.3MB -> 2.1MB)
    • Efek pengurangan ukuran file juga terlihat di beberapa entry point

Dampak dan kesimpulan

  • Hasil implementasi production menunjukkan waktu warm build berkurang lebih dari 90%, menjadi sekitar 5 detik
  • Dalam mode watch, perubahan pada file TypeScript dapat di-rebuild dalam waktu kurang dari 1 detik
  • Para developer memberikan umpan balik bahwa efisiensi kerja mereka meningkat pesat berkat sistem build baru
  • Berkat upaya tim QA dan para developer volunteer, transisi ke sistem build baru berjalan lancar
  • Hasil survei kepuasan developer menunjukkan ketidakpuasan terhadap waktu build turun drastis dari 97% menjadi 5%
  • esbuild adalah alat yang sangat baik, dan proyek hackathon adalah wadah yang sangat cocok untuk pekerjaan seperti ini

Belum ada komentar.

Belum ada komentar.