Dalam dunia pembangunan JavaScript, usaha untuk mencapai minimalisme kadangkala menghasilkan perpustakaan yang mengutamakan saiz berbanding fungsi. Perpustakaan PubSub bersaiz 149-bait baru-baru ini telah mencetuskan perbincangan hangat di kalangan pembangun tentang keseimbangan antara saiz kod dan aplikasi praktikal.
EventTarget sebagai Asas PubSub
Perpustakaan yang dibincangkan memanfaatkan API natif JavaScript iaitu EventTarget
untuk mencipta apa yang dikatakan oleh penulisnya sebagai implementasi publish-subscribe yang paling kecil mungkin. Dengan hanya 149 bait apabila diminifikasi, ia lebih kecil berbanding pesaing seperti nano-pubsub (194 bait) dan tiny-pubsub (401 bait). Keseluruhan implementasi terdiri daripada hanya tiga baris kod yang mencipta fungsi global pub
dan sub
yang dibina di atas API EventTarget
dan CustomEvent
.
Walaupun mengagumkan dengan keringkasannya, ahli komuniti telah membangkitkan kebimbangan yang wajar tentang pendekatan ini. Satu kelebihan penting yang diketengahkan adalah bahawa EventTarget
menggunakan rujukan lemah kepada pendengarnya, yang membantu mencegah kebocoran memori - isu biasa dengan implementasi PubSub yang dibuat sendiri di mana pendengar tidak dinyahlanggani dengan betul.
Jika pendengar implementasi ini tidak dinyahlanggani, mereka tidak boleh dikumpulkan sebagai sampah, dan dalam kod dunia sebenar, ini bermakna kebocoran memori tidak dapat dielakkan. EventDispatcher mempunyai rujukan lemah kepada pendengarnya, jadi ia tidak menghadapi masalah ini.
Perbandingan Saiz Perpustakaan PubSub:
- pico-pubsub: 149 bait
- nano-pubsub: 194 bait (lebih besar ~30%)
- tiny-pubsub: 401 bait (lebih daripada dua kali ganda saiz nano-pubsub)
Pertimbangan Teknikal Utama:
- EventTarget menggunakan rujukan lemah kepada pendengar (membantu mencegah kebocoran memori)
- Pembungkusan CustomEvent memerlukan kod tambahan di lokasi panggilan
- Sokongan TypeScript memerlukan kod pengisytiharan tambahan
Kebimbangan Reka Bentuk API
Beberapa pembangun mempersoalkan sama ada pilihan reka bentuk API perpustakaan ini masuk akal dalam aplikasi praktikal. Satu kritikan utama tertumpu pada bagaimana perpustakaan menyalurkan data melalui sifat detail
objek CustomEvent
, memerlukan pembangun untuk membuka bungkusan data ini pada setiap tempat panggilan dengan event.detail
. Seperti yang dinyatakan oleh seorang pengulas, ini secara efektif mengalihkan kod dari perpustakaan kepada setiap tempat ia digunakan, yang bertentangan dengan prinsip reka bentuk perpustakaan yang baik.
Kekurangan sokongan TypeScript juga dinyatakan sebagai satu batasan, walaupun penulis telah menyertakan cebisan deklarasi TypeScript sebagai penyelesaian. Sesetengah pembangun mencadangkan implementasi alternatif yang mengekalkan saiz kecil sambil menyediakan pengetikan yang lebih baik dan API yang lebih intuitif.
Persoalan Nilai Cadangan
Perbincangan komuniti akhirnya berkisar tentang persoalan asas: adakah perpustakaan ini memberikan nilai yang cukup untuk mewajarkan kewujudannya sebagai pakej? Sesetengah pembangun membandingkannya dengan kontroversi left-pad yang terkenal, mencadangkan bahawa membungkus API natif yang begitu mudah mungkin tidak perlu.
Yang lain menghargai aspek pendidikan projek ini, menyatakan bahawa ia memperkenalkan mereka kepada API CustomEvent
yang sebelum ini tidak mereka ketahui. Beberapa pengulas bahkan menyebut rancangan untuk menggabungkan pendekatan serupa dalam projek mereka sendiri, menunjukkan bahawa walaupun perpustakaan minimal boleh menginspirasi teknik baru.
Akhirnya, perpustakaan kecil ini berfungsi sebagai pencetus perbualan tentang keseimbangan antara minimalisme dan kepraktisan dalam pembangunan JavaScript. Walaupun jejak 149-baitnya mungkin mengagumkan, perbincangan komuniti menekankan bahawa saiz bukanlah segalanya - reka bentuk API, pengurusan memori, dan pengalaman pembangun kekal sebagai pertimbangan penting ketika menilai mana-mana perpustakaan, tidak kira betapa kecilnya.
Rujukan: pico-pubsub