Morph ไลบรารีแบบ fullstack ใหม่ที่สามารถฝังได้สำหรับการสร้างแอปพลิเคชันแบบ Hypermedia-Driven โดยไม่ต้องมีขั้นตอนการ build ได้จุดประกายการถกเถียงอย่างคึกคักในหมู่นักพัฒนาเกี่ยวกับข้อดีของการรวมโค้ดฝั่งเซิร์ฟเวอร์และไคลเอนต์เข้าด้วยกันในลักษณะคล้าย PHP ไลบรารีนี้ทำงานบน Hono และรองรับ runtime ของ Deno, Node และ Bun มีเป้าหมายเพื่อทำให้การพัฒนาเว็บง่ายขึ้นโดยอนุญาตให้คอมโพเนนต์เรียกใช้ API ของตัวเองที่ส่งคืน hypertext
รันไทม์ที่รองรับ
- Deno
- Node.js
- Bun
การเปรียบเทียบกับ PHP
นักพัฒนาหลายคนในชุมชนได้เปรียบเทียบแนวทางของ Morph กับโมเดลดั้งเดิมของ PHP ที่ผสม HTML และโค้ดเข้าด้วยกัน การเปรียบเทียบนี้ได้จุดประกายการอภิปรายอย่างมีนัยสำคัญเกี่ยวกับแนวปฏิบัติในการพัฒนาสมัยใหม่เทียบกับกระบวนทัศน์แบบเก่า ผู้แสดงความคิดเห็นรายหนึ่งสังเกตอย่างตรงไปตรงมาว่าการพัฒนา PHP สมัยใหม่ได้พัฒนาห่างจากการผสมตรรกะทางธุรกิจกับเทมเพลต:
PHP สมัยใหม่ไม่ได้เขียนในลักษณะที่ตรรกะทางธุรกิจถูกผสมกับการทำเทมเพลต ด้วยเหตุผลที่ดี
ความคิดเห็นนี้สะท้อนถึงการเปลี่ยนแปลงในอุตสาหกรรมที่กว้างขึ้นไปสู่การแยกความกังวลในการพัฒนาเว็บ ที่ตรรกะการนำเสนอถูกแยกออกจากตรรกะทางธุรกิจ การถกเถียงมุ่งเน้นไปที่ว่าแนวทางของ Morph เป็นการถอยหลังไปสู่แนวปฏิบัติแบบเก่าหรือเป็นการทำให้ง่ายขึ้นอย่างมีเหตุผลสำหรับกรณีการใช้งานบางอย่าง
ข้อพิจารณาด้านสถาปัตยกรรม
นักพัฒนาหลายคนได้แสดงความกังวลเกี่ยวกับวิธีที่สถาปัตยกรรมของ Morph จะจัดการกับความท้าทายในการขยายขนาด นักพัฒนาคนหนึ่งสังเกตว่า Morph ดูเหมือนจะพลาดจุดขายหลักของ PHP นั่นคือ shared nothing, single thread, fire and forget methodology ที่ฉันสามารถโยนไว้หลัง load balancer และเปิดเซิร์ฟเวอร์ 100 เครื่อง สิ่งนี้เน้นย้ำถึงข้อพิจารณาที่สำคัญสำหรับเฟรมเวิร์กเว็บใดๆ: มันทำงานได้ดีแค่ไหนภายใต้โหลดและในสภาพแวดล้อมแบบกระจาย
การอภิปรายยังเกี่ยวข้องกับสิ่งที่ประกอบเป็นแก่นของการพัฒนาแบบ PHP บางคนโต้แย้งว่าการผสม HTML และโค้ดผ่าน JavaScript tagged template literals ก็บรรลุสิ่งที่ PHP ทำอยู่แล้ว โดยตั้งคำถามว่า Morph นำเสนอคุณค่าเพิ่มเติมอะไรนอกเหนือจาก css และประโยชน์ด้านเทมเพลตอื่นๆ
หลักการพื้นฐานของ Morph
- คอมโพเนนต์สามารถเรียกใช้ API ของตัวเองที่ส่งคืนข้อมูล hypertext ได้
- คอมโพเนนต์ทั้งหมดถูกเรนเดอร์บนเซิร์ฟเวอร์พร้อมการเข้าถึงบริบทฝั่งเซิร์ฟเวอร์
- การเรนเดอร์และการเรนเดอร์ซ้ำของคอมโพเนนต์แบบอิสระ
- ลำดับชั้นของคอมโพเนนต์พร้อมความสามารถในการซ้อนกัน
- ใช้ JavaScript ฝั่งไคลเอนต์น้อยที่สุดหรือไม่ใช้เลย
- ไม่จำเป็นต้องมีขั้นตอนการ build
- ไม่จำเป็นต้องออกแบบโครงสร้างข้อมูล API ล่วงหน้า
- สามารถฝังในโปรเจค Deno/Node/Bun ใดๆ ได้
การพัฒนาแบบมุ่งเน้นคอมโพเนนต์
แนวทางของ Morph ดูเหมือนจะเอนเอียงไปทางการพัฒนาแบบมุ่งเน้นคอมโพเนนต์คล้ายกับเฟรมเวิร์กอย่าง Blazor หรือ Angular มากกว่า PHP แบบดั้งเดิม ไลบรารีนี้เน้นคอมโพเนนต์ที่เรนเดอร์ด้วยเซิร์ฟเวอร์ซึ่งสามารถเรนเดอร์ใหม่อย่างอิสระและซ้อนกันเองได้ เป็นลำดับชั้น โมเดลนี้มีเป้าหมายเพื่อรวมประโยชน์ของการเรนเดอร์ฝั่งเซิร์ฟเวอร์กับลักษณะไดนามิกของแอปพลิเคชันหน้าเดียว ในขณะที่ลด JavaScript ฝั่งไคลเอนต์ให้เหลือน้อยที่สุด
สำหรับนักพัฒนาที่ทำงานกับโปรเจกต์ขนาดเล็กเช่น Telegram bots, แอปพลิเคชันเดสก์ท็อป หรือเครื่องมือภายใน Morph นำเสนอประสบการณ์การพัฒนาที่อาจจะมีประสิทธิภาพซึ่งไม่จำเป็นต้องแยก frontend และ backend เป็นบริการแยกกัน การที่ไลบรารีเน้นที่การไม่มีขั้นตอนการ build และใช้ JavaScript ฝั่งไคลเอนต์น้อยที่สุด ทำให้เป็นทางเลือกแทนเฟรมเวิร์กที่หนักกว่าสำหรับโปรเจกต์ที่ไม่จำเป็นต้องมีความซับซ้อนมาก
ในขณะที่การพัฒนาเว็บยังคงพัฒนาต่อไป เครื่องมืออย่าง Morph แสดงถึงการทดลองที่น่าสนใจในการหาความสมดุลที่เหมาะสมระหว่างประสบการณ์ของนักพัฒนา ประสิทธิภาพ และความสามารถในการบำรุงรักษา การที่แนวทางของมันจะได้รับการยอมรับอย่างกว้างขวางหรือไม่ จะขึ้นอยู่กับว่ามันจัดการกับความกังวลที่ชุมชนนักพัฒนาได้ยกขึ้นมาได้ดีแค่ไหน ในขณะที่ยังคงรักษาคำสัญญาในการทำให้ง่ายขึ้น
อ้างอิง: Morph