ไลบรารี PubSub บนพื้นฐาน EventTarget จุดประเด็นถกเถียงระหว่างความเรียบง่ายกับความใช้งานได้จริง

BigGo Editorial Team
ไลบรารี PubSub บนพื้นฐาน EventTarget จุดประเด็นถกเถียงระหว่างความเรียบง่ายกับความใช้งานได้จริง

ในโลกของการพัฒนา JavaScript การแสวงหาความเรียบง่ายบางครั้งก็ทำให้เกิดไลบรารีที่ให้ความสำคัญกับขนาดมากกว่าฟังก์ชันการทำงาน ไลบรารี PubSub ขนาด 149 ไบต์ที่เพิ่งเปิดตัวได้จุดประเด็นถกเถียงอย่างเข้มข้นในหมู่นักพัฒนาเกี่ยวกับการแลกเปลี่ยนระหว่างขนาดของโค้ดกับการนำไปใช้งานจริง

EventTarget เป็นพื้นฐานของ PubSub

ไลบรารีดังกล่าวใช้ประโยชน์จาก API ดั้งเดิมของ JavaScript อย่าง EventTarget เพื่อสร้างสิ่งที่ผู้พัฒนาอ้างว่าเป็นการใช้งานแบบ publish-subscribe ที่มีขนาดเล็กที่สุดเท่าที่เป็นไปได้ ด้วยขนาดเพียง 149 ไบต์เมื่อทำการ minified ทำให้มีขนาดเล็กกว่าคู่แข่งอย่าง nano-pubsub (194 ไบต์) และ tiny-pubsub (401 ไบต์) การใช้งานทั้งหมดประกอบด้วยโค้ดเพียงสามบรรทัดที่สร้างฟังก์ชันระดับโกลบอล pub และ sub ซึ่งสร้างขึ้นบน API ของ EventTarget และ CustomEvent

แม้จะน่าประทับใจในความกระชับ สมาชิกในชุมชนได้แสดงความกังวลที่มีเหตุผลเกี่ยวกับแนวทางนี้ ข้อดีที่สำคัญประการหนึ่งที่ถูกเน้นย้ำคือ EventTarget ใช้การอ้างอิงแบบอ่อน (weak references) กับผู้ฟังของมัน ซึ่งช่วยป้องกันการรั่วไหลของหน่วยความจำ ซึ่งเป็นปัญหาทั่วไปในการใช้งาน PubSub แบบกำหนดเองที่ผู้ฟังไม่ได้ถูกยกเลิกการสมัครอย่างเหมาะสม

หากผู้ฟังของการใช้งานนี้ไม่ได้ถูกยกเลิกการสมัคร พวกเขาจะไม่สามารถถูกเก็บขยะได้ และในโค้ดเบสของโลกจริงนั่นหมายความว่าการรั่วไหลของหน่วยความจำเป็นสิ่งที่หลีกเลี่ยงไม่ได้ EventDispatcher มีการอ้างอิงแบบอ่อนไปยังผู้ฟังของมัน ดังนั้นจึงไม่มีปัญหานี้

การเปรียบเทียบขนาดของไลบรารี PubSub:

  • pico-pubsub: 149 ไบต์
  • nano-pubsub: 194 ไบต์ (ใหญ่กว่าประมาณ 30%)
  • tiny-pubsub: 401 ไบต์ (ใหญ่กว่า nano-pubsub มากกว่าสองเท่า)

ข้อพิจารณาทางเทคนิคที่สำคัญ:

  • EventTarget ใช้การอ้างอิงแบบอ่อน (weak references) กับผู้ฟัง (ช่วยป้องกันการรั่วไหลของหน่วยความจำ)
  • การห่อหุ้มด้วย CustomEvent ต้องใช้โค้ดเพิ่มเติมที่จุดเรียกใช้งาน
  • การสนับสนุน TypeScript ต้องการโค้ดประกาศเพิ่มเติม

ข้อกังวลเกี่ยวกับการออกแบบ API

นักพัฒนาหลายคนตั้งคำถามว่าการเลือกออกแบบ API ของไลบรารีนี้มีความเหมาะสมในการใช้งานจริงหรือไม่ การวิจารณ์ที่สำคัญมุ่งเน้นไปที่วิธีที่ไลบรารีส่งข้อมูลผ่านคุณสมบัติ detail ของออบเจ็กต์ CustomEvent ซึ่งทำให้นักพัฒนาต้องแกะข้อมูลนี้ที่ทุกจุดที่เรียกใช้ด้วย event.detail ตามที่ผู้แสดงความคิดเห็นรายหนึ่งระบุว่า สิ่งนี้ทำให้โค้ดย้ายจากไลบรารีไปยังทุกที่ที่มีการใช้งาน ซึ่งขัดกับหลักการออกแบบไลบรารีที่ดี

การขาดการสนับสนุน TypeScript ก็ถูกระบุว่าเป็นข้อจำกัดเช่นกัน แม้ว่าผู้พัฒนาจะรวมส่วนของ TypeScript declaration ไว้เป็นทางแก้ปัญหาชั่วคราว นักพัฒนาบางคนแนะนำการใช้งานทางเลือกที่ยังคงรักษาขนาดเล็กไว้ในขณะที่ให้การพิมพ์ที่ดีขึ้นและ API ที่ใช้งานง่ายกว่า

คำถามเรื่องคุณค่าที่นำเสนอ

การสนทนาในชุมชนสุดท้ายแล้ววนเวียนอยู่รอบคำถามพื้นฐาน: ไลบรารีนี้ให้คุณค่าเพียงพอที่จะรับรองการมีอยู่ของมันในฐานะแพ็คเกจหรือไม่? นักพัฒนาบางคนเปรียบเทียบมันกับข้อถกเถียงอันโด่งดังเรื่อง left-pad โดยแนะนำว่าการห่อหุ้ม API ดั้งเดิมที่เรียบง่ายเช่นนี้อาจไม่จำเป็น

คนอื่น ๆ ชื่นชมแง่มุมด้านการศึกษาของโปรเจกต์ โดยระบุว่ามันแนะนำพวกเขาให้รู้จักกับ API CustomEvent ที่พวกเขาไม่คุ้นเคยมาก่อน ผู้แสดงความคิดเห็นบางคนถึงกับกล่าวถึงแผนที่จะนำแนวทางที่คล้ายกันไปใช้ในโปรเจกต์ของตนเอง แสดงให้เห็นว่าแม้แต่ไลบรารีขนาดเล็กก็สามารถสร้างแรงบันดาลใจให้กับเทคนิคใหม่ ๆ ได้

ในท้ายที่สุด ไลบรารีขนาดเล็กนี้ทำหน้าที่เป็นจุดเริ่มต้นของการสนทนาเกี่ยวกับความสมดุลระหว่างความเรียบง่ายและความใช้งานได้จริงในการพัฒนา JavaScript แม้ว่าขนาด 149 ไบต์ของมันอาจน่าประทับใจ การสนทนาในชุมชนเน้นย้ำว่าขนาดไม่ใช่ทุกสิ่ง - การออกแบบ API การจัดการหน่วยความจำ และประสบการณ์ของนักพัฒนายังคงเป็นสิ่งสำคัญที่ต้องพิจารณาเมื่อประเมินไลบรารีใด ๆ ไม่ว่าจะมีขนาดเล็กแค่ไหนก็ตาม

อ้างอิง: pico-pubsub