เฟรมเวิร์ก Ripple จุดประกายการถกเถียงเรื่อง JSX กับ HTML Templates และแนวทางการเขียนโปรแกรมแบบ Reactive

ทีมชุมชน BigGo
เฟรมเวิร์ก Ripple จุดประกายการถกเถียงเรื่อง JSX กับ HTML Templates และแนวทางการเขียนโปรแกรมแบบ Reactive

เฟรมเวิร์ก UI ใหม่สำหรับ TypeScript ที่ชื่อ Ripple ได้เกิดขึ้นจาก Dominic Gannaway นักพัฒนาที่มีประวัติน่าประทับใจ รวมถึงการทำงานกับ React , Svelte 5 และเฟรมเวิร์ก Inferno ต้นฉบับ สร้างขึ้นในเวลาไม่ถึงหนึ่งสัปดาห์ในฐานะโปรเจกต์ทดลอง Ripple พยายามผสมผสานแนวคิดจาก React และ Svelte พร้อมกับนำเสนอไวยากรณ์และโมเดลการเขียนโปรแกรมแบบ reactive ที่เป็นเอกลักษณ์

ประวัติของนักพัฒนา:

  • Dominic Gannaway : ผู้เขียน Inferno คนแรก
  • อ전 React ทีมเมมเบอร์
  • ผู้มีส่วนร่วมหลักใน Svelte 5 (ระบบ runes)
  • สร้าง Ripple ในเวลาน้อยกว่าหนึ่งสัปดาห์เป็นโปรเจกต์ทดลอง
ภาพหน้าจอของหน้า repository GitHub สำหรับ framework Ripple แสดงให้เห็น commit ล่าสุดและกิจกรรมของโปรเจกต์
ภาพหน้าจอของหน้า repository GitHub สำหรับ framework Ripple แสดงให้เห็น commit ล่าสุดและกิจกรรมของโปรเจกต์

ชุมชนตั้งคำถามเกี่ยวกับการเลือกออกแบบหลักของเฟรมเวิร์ก

ชุมชนนักพัฒนาได้แสดงความกังวลอย่างมากเกี่ยวกับการตัดสินใจออกแบบพื้นฐานของ Ripple นักวิจารณ์โต้แย้งว่าเฟรมเวิร์กนี้ทำลายรูปแบบการเขียนโปรแกรมที่คาดหวังโดยไม่มีประโยชน์ที่ชัดเจน ประเด็นที่ถกเถียงกันมากที่สุดคือโครงสร้างคอมโพเนนต์ของ Ripple ที่แสดงผล JSX ภายในวงเล็บโดยอัตโนมัติ แทนที่จะทำงานเป็นฟังก์ชันแบบดั้งเดิมที่ส่งคืนมุมมอง การออกจากรูปแบบมาตรฐานของฟังก์ชันสู่ UI นี้ทำให้นักพัฒนาหลายคนตั้งคำถามเกี่ยวกับข้อได้เปรียบในทางปฏิบัติ

ตัวเลือกไวยากรณ์ของเฟรมเวิร์กยังจุดประกายการถกเถียงอย่างรุนแรง ในขณะที่นักพัฒนาบางคนชื่นชม JSX เพราะความสามารถในการใช้ซ้ำ JavaScript control flow primitives เช่น map, filter และ conditional statements นักพัฒนาคนอื่นๆ กลับชอบไวยากรณ์เทมเพลตแบบ HTML ที่พบในเฟรมเวิร์กอย่าง Vue และ Svelte การถกเถียงนี้สะท้อนความแตกแยกทางปรัชญาที่ลึกซึ้งในชุมชนนักพัฒนาเว็บเกี่ยวกับแนวทางที่ดีที่สุดสำหรับการทำเทมเพลตคอมโพเนนต์

การใช้งานการเขียนโปรแกรมแบบ Reactive ได้รับปฏิกิริยาที่หลากหลาย

โมเดลการเขียนโปรแกรมแบบ reactive ของ Ripple ใช้ตัวแปรที่มีเครื่องหมายดอลลาร์นำหน้า ($variable) เพื่อทริกเกอร์การ re-render โดยอัตโนมัติเมื่อสถานะเปลี่ยนแปลง อย่างไรก็ตาม แนวทางนี้ต้องการให้นักพัฒนาอิมพอร์ต array primitives พิเศษจากแพ็กเกจเฟรมเวิร์ก ซึ่งหลายคนพบว่าซับซ้อนเกินความจำเป็น ชุมชนได้ชี้ให้เห็นว่า JavaScript proxies สมัยใหม่สามารถทำให้เกิด reactivity ที่คล้ายกันได้โดยไม่ต้องใช้ไวยากรณ์หรือการอิมพอร์ตพิเศษ

Array primitive ดูเหมือนจะเป็น reactive version ของ array ซึ่งดูแปลกเพราะ primitive พื้นฐานอย่าง array ควรจะสามารถทำให้เป็น reactive ได้โดยค่าเริ่มต้น

นักพัฒนาหลายคนได้สังเกตว่าเฟรมเวิร์กที่มีอยู่แล้วอย่าง Solid และ Svelte ให้โซลูชันที่ครบครันสำหรับการเขียนโปรแกรมแบบ reactive พร้อมประสบการณ์นักพัฒนาที่ดีกว่าและไวยากรณ์ที่สะอาดกว่า

คุณสมบัติหลัก:

  • การจัดการสถานะแบบ Reactive ด้วยตัวแปรที่มีเครื่องหมาย $ นำหน้า
  • สถาปัตยกรรมแบบ Component-Based ที่มี props และ children
  • ไวยากรณ์คล้าย JSX พร้อมการปรับปรุงเฉพาะของ Ripple
  • การรวม TypeScript แบบเต็มรูปแบบ
  • การรวม Fibers ในตัว

ความกังวลเรื่องความเหนื่อยล้าจากเฟรมเวิร์กและการวางตำแหน่งในตลาด

การประกาศนี้ได้เน้นย้ำถึงความเหนื่อยล้าจากเฟรมเวิร์กที่เพิ่มขึ้นในชุมชน JavaScript นักพัฒนาหลายคนตั้งคำถามว่าระบบนิเวศต้องการเฟรมเวิร์กอีกตัวหรือไม่ เมื่อโซลูชันที่มีอยู่แล้วอย่าง Svelte , Solid และ React ได้แก้ไขกรณีการใช้งานส่วนใหญ่อย่างมีประสิทธิภาพแล้ว จังหวะเวลาดูเหมือนจะท้าทายเป็นพิเศษ เนื่องจากชุมชนให้ความสำคัญกับความเสถียรและแนวทางที่เป็นแพลตฟอร์มดั้งเดิมมากกว่าการแยกแยะใหม่ๆ

นักพัฒนาบางคนได้แสดงความสนใจในการลดการผูกมัดกับเฟรมเวิร์กและใช้ฟีเจอร์ของแพลตฟอร์มเว็บโดยตรงมากกว่า แทนที่จะนำโซลูชันที่เป็นกรรมสิทธิ์ใหม่ๆ มาใช้ ความรู้สึกนี้สะท้อนแนวโน้มในอุตสาหกรรมที่กว้างขึ้นไปสู่การทำให้ง่ายขึ้นและการมาตรฐาน

คุณสมบัติที่ยังขาดหายไป:

  • Server-Side Rendering (SSR) - ปัจจุบันรองรับเฉพาะ SPA เท่านั้น
  • เฟรมเวิร์กการทดสอบที่ครอบคลุม
  • คำจำกัดความประเภทข้อมูลที่เสถียร
  • เอกสารประกอบที่พร้อมใช้งานจริง

ความครบครันทางเทคนิคและความพร้อมสำหรับการใช้งานจริง

ปัจจุบัน Ripple อยู่ในระยะ alpha ตอนต้น ยอมรับข้อจำกัดที่สำคัญรวมถึงการขาด server-side rendering การทดสอบที่น้อยมาก และบั๊กมากมาย เฟรมเวิร์กนี้ถูกระบุอย่างชัดเจนว่าไม่เหมาะสำหรับการใช้งานจริง ในขณะที่ลักษณะการทดลองอนุญาตให้มีตัวเลือกการออกแบบที่กล้าหาญ แต่ก็ทำให้เกิดคำถามเกี่ยวกับความสามารถในการอยู่รอดระยะยาวและการยอมรับของชุมชน

นักพัฒนาได้สร้างเครื่องมือสนับสนุนรวมถึง VSCode extension และมีแผนสำหรับ online playground ซึ่งแสดงความมุ่งมั่นต่อระบบนิเวศ อย่างไรก็ตาม ไทม์ไลน์การพัฒนาที่รวดเร็วและระยะเริ่มต้นหมายความว่าฟีเจอร์หลักมากมายยังคงไม่สมบูรณ์หรือไม่เสถียร

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

อ้างอิง: Ripple