Dalam dunia pengembangan JavaScript, pencarian minimalisme terkadang menghasilkan perpustakaan yang memprioritaskan ukuran daripada fungsionalitas. Sebuah perpustakaan PubSub berukuran 149 byte baru-baru ini telah memicu diskusi sengit di antara para pengembang tentang pertukaran antara ukuran kode dan aplikasi praktis.
EventTarget sebagai Fondasi PubSub
Perpustakaan yang dibicarakan memanfaatkan API native JavaScript yaitu EventTarget
untuk menciptakan apa yang diklaim penulisnya sebagai implementasi publish-subscribe terkecil yang mungkin dibuat. Dengan ukuran hanya 149 byte setelah diminifikasi, perpustakaan ini mengalahkan pesaing seperti nano-pubsub (194 byte) dan tiny-pubsub (401 byte). Seluruh implementasinya terdiri dari hanya tiga baris kode yang menciptakan fungsi global pub
dan sub
yang dibangun di atas API EventTarget
dan CustomEvent
.
Meskipun mengesankan dalam keringkasannya, anggota komunitas telah mengangkat kekhawatiran yang beralasan tentang pendekatan ini. Salah satu keuntungan signifikan yang disoroti adalah bahwa EventTarget
menggunakan referensi lemah (weak references) ke pendengarnya, yang membantu mencegah kebocoran memori - masalah umum pada implementasi PubSub kustom di mana pendengar tidak dibatalkan langganannya dengan benar.
Jika pendengar dari implementasi ini tidak dibatalkan langganannya, mereka tidak dapat dikumpulkan oleh garbage collector, dan dalam basis kode dunia nyata itu berarti kebocoran memori tidak dapat dihindari. EventDispatcher memiliki referensi lemah ke pendengarnya, sehingga tidak memiliki masalah ini.
Perbandingan Ukuran Pustaka PubSub:
- pico-pubsub: 149 byte
- nano-pubsub: 194 byte (sekitar 30% lebih besar)
- tiny-pubsub: 401 byte (lebih dari dua kali lipat ukuran nano-pubsub)
Pertimbangan Teknis Utama:
- EventTarget menggunakan referensi lemah ke pendengar (membantu mencegah kebocoran memori)
- Pembungkusan CustomEvent memerlukan kode tambahan di lokasi pemanggilan
- Dukungan TypeScript membutuhkan kode deklarasi tambahan
Kekhawatiran Desain API
Beberapa pengembang mempertanyakan apakah pilihan desain API perpustakaan ini masuk akal dalam aplikasi praktis. Kritik utama berpusat pada bagaimana perpustakaan meneruskan data melalui properti detail
objek CustomEvent
, yang mengharuskan pengembang untuk membuka data ini di setiap tempat pemanggilan dengan event.detail
. Seperti yang dicatat oleh seorang komentator, ini secara efektif memindahkan kode dari perpustakaan ke setiap tempat yang menggunakannya, yang bertentangan dengan prinsip desain perpustakaan yang baik.
Kurangnya dukungan TypeScript juga dicatat sebagai keterbatasan, meskipun penulis menyertakan snippet deklarasi TypeScript sebagai solusi. Beberapa pengembang menyarankan implementasi alternatif yang mempertahankan ukuran kecil sambil menyediakan pengetikan yang lebih baik dan API yang lebih intuitif.
Pertanyaan Proposisi Nilai
Diskusi komunitas pada akhirnya berkisar pada pertanyaan mendasar: apakah perpustakaan ini memberikan nilai yang cukup untuk membenarkan keberadaannya sebagai paket? Beberapa pengembang membandingkannya dengan kontroversi left-pad yang terkenal, menunjukkan bahwa membungkus API native yang begitu sederhana mungkin tidak diperlukan.
Yang lain menghargai aspek edukatif dari proyek tersebut, mencatat bahwa proyek ini memperkenalkan mereka pada API CustomEvent
yang sebelumnya tidak mereka kenal. Beberapa komentator bahkan menyebutkan rencana untuk menggabungkan pendekatan serupa dalam proyek mereka sendiri, menunjukkan bahwa bahkan perpustakaan minimal dapat menginspirasi teknik baru.
Pada akhirnya, perpustakaan kecil ini berfungsi sebagai pemicu percakapan tentang keseimbangan antara minimalisme dan kepraktisan dalam pengembangan JavaScript. Meskipun ukurannya yang 149 byte mungkin mengesankan, diskusi komunitas menyoroti bahwa ukuran bukanlah segalanya - desain API, pengelolaan memori, dan pengalaman pengembang tetap menjadi pertimbangan penting ketika mengevaluasi perpustakaan apa pun, tidak peduli seberapa kecil ukurannya.
Referensi: pico-pubsub