นักพัฒนา PHP ถกเถียงระหว่างสถาปัตยกรรมแบบผสมผสานกับการย้ายภาษาโปรแกรมทั้งหมด

ทีมชุมชน BigGo
นักพัฒนา PHP ถกเถียงระหว่างสถาปัตยกรรมแบบผสมผสานกับการย้ายภาษาโปรแกรมทั้งหมด

ชุมชน PHP กำลังหารือกันอย่างจริงจังว่าควรจะยอมรับสถาปัตยกรรมแบบผสมผสานที่ผสมผสาน PHP กับภาษาที่เร็วกว่าอย่าง Go และ Rust หรือควรย้ายไปใช้ทางเลือกที่มีประสิทธิภาพสูงกว่าทั้งหมด การถกเถียงนี้มีความรุนแรงมากขึ้นหลังจากการพัฒนาล่าสุดในเทคโนโลยี runtime ของ PHP และความสามารถของ extension

แนวทางแบบผสมผสานได้รับความนิยมเพิ่มขึ้น

การพัฒนา PHP สมัยใหม่กำลังเคลื่อนไปสู่โซลูชันแบบผสมผสานที่รวมประสิทธิภาพการทำงานของนักพัฒนาจาก PHP เข้ากับประโยชน์ด้านประสิทธิภาพของภาษาที่คอมไพล์แล้ว worker mode ของ FrankenPHP ได้กลายเป็นตัวเลือกที่น่าสนใจเป็นพิเศษ โดยให้ประสิทธิภาพที่ดีขึ้นถึง 4 เท่าเมื่อเทียบกับการตั้งค่า PHP แบบดั้งเดิม แพลตฟอร์มนี้ตอนนี้รองรับการเขียน extension ของ PHP ใน Go ทำให้นักพัฒนาสามารถรวมโค้ดที่มีประสิทธิภาพสูงเข้ากับแอปพลิเคชัน PHP ที่มีอยู่ได้อย่างราบรื่น

นอกเหนือจาก FrankenPHP แล้ว นักพัฒนายังกำลังสำรวจ Foreign Function Interface (FFI) ของ PHP เพื่อเรียกใช้โค้ด C โดยตรง และเขียน extension ใน Rust เพื่อประสิทธิภาพที่ปลอดภัยต่อหน่วยความจำ runtime ทางเลือกอื่นๆ เช่น RoadRunner และ Pasir ที่อยู่ในช่วงทดลอง (สร้างด้วย Rust) ก็ได้รับความสนใจเป็นตัวเลือกที่เป็นไปได้สำหรับแอปพลิเคชัน PHP ที่ต้องการประสิทธิภาพที่ดีกว่า

ทางเลือก PHP Runtime อื่นๆ

  • FrankenPHP: รันไทม์ที่พัฒนาด้วย Go พร้อมโหมด worker และรองรับ extension ของ Go
  • RoadRunner: ทางเลือกที่เน้น PHP เป็นหลักแทน FrankenPHP
  • Pasir: รันไทม์ PHP ที่พัฒนาด้วย Rust (อยู่ในช่วงพัฒนาเบื้องต้น)
  • ReactPHP: ไลบรารีเซิร์ฟเวอร์ PHP แบบ event-driven
  • Workerman: เฟรมเวิร์ก PHP แบบ asynchronous พร้อมแบ็กเอนด์แบบไฮบริด

ชุมชนแบ่งแยกเรื่องกลยุทธ์การย้าย

ชุมชนนักพัฒนายังคงแบ่งแยกเรื่องเส้นทางที่ดีที่สุดในการก้าวไปข้างหน้า นักพัฒนาบางคนสนับสนุนการเขียนใหม่ทั้งหมดเป็นภาษาอย่าง Go โดยอ้างถึงการลดโค้ดอย่างมีนัยสำคัญและการบำรุงรักษาที่ดีขึ้น นักพัฒนาคนหนึ่งรายงานว่าประสบความสำเร็จในการลดแอปพลิเคชัน PHP ขนาด 20,000 บรรทัดให้เหลือเพียง 4,000 บรรทัดของโค้ด Go พร้อมทั้งได้รับประสิทธิภาพที่ดีขึ้นอย่างมาก

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

การเปรียบเทียบประสิทธิภาพ

  • โหมด worker ของ FrankenPHP : เร็วกว่าการตั้งค่า PHP แบบดั้งเดิมถึง 4 เท่า
  • ตัวอย่างการลดโค้ด: PHP 20,000 บรรทัด → Go 4,000 บรรทัด
  • การกระจายตัวของคอขวดด้านประสิทธิภาพ: 80% ของการเข้าใช้งานมุ่งเป้าไปที่ 20% ของ APIs (หลักการ Pareto)

ข้อจำกัดทางเทคนิคขับเคลื่อนการสนทนา

ข้อจำกัดที่ยังคงมีอยู่ของ PHP ยังคงเป็นเชื้อเพลิงให้กับการสนทนาเรื่องการย้าย ภาษานี้ยังขาดคุณสมบัติเช่น typed arrays และ generics ซึ่งอาจนำไปสู่ข้อผิดพลาดขณะรันไทม์ที่ภาษาอื่นๆ สามารถป้องกันได้ในขณะคอมไพล์ แม้ว่า static analyzer สามารถตรวจจับปัญหาเหล่านี้บางส่วนได้ และการรองรับ generics อาจมาถึงใน PHP เวอร์ชันในอนาคต แต่ช่องว่างเหล่านี้ยังคงเป็นแหล่งที่มาของความหงุดหงิดสำหรับนักพัฒนาที่ทำงานกับแอปพลิเคชันขนาดใหญ่

แม้ว่าจะเป็นความจริงอย่างสมบูรณ์ แต่คุณก็ใช้ static analyzer อยู่แล้วซึ่งจะไม่ให้คุณทำเช่นนี้ การรองรับ generics น่าจะมาในอนาคตอันใกล้ เพราะมีแรงผลักดันในเรื่องนี้อีกครั้ง

ตัวเลือกสถาปัตยกรรมแบบผสม

  • FFI (Foreign Function Interface): เรียกใช้โค้ด C โดยตรงจาก PHP
  • Rust Extensions: เขียนส่วนขยาย PHP ด้วย Rust เพื่อความปลอดภัยในการจัดการหน่วยความจำ
  • Go Extensions: ใช้งานได้ผ่าน FrankenPHP สำหรับ API ประสิทธิภาพสูง
  • Static Analyzers: ช่วยตรวจจับข้อผิดพลาดที่เกี่ยวข้องกับประเภทข้อมูลในโค้ด PHP

ภาษาทางเลือกเข้าร่วมการสนทนา

การถกเถียงได้ขยายออกไปนอกเหนือจาก PHP เทียบกับ Go ไปรวมถึงทางเลือกอื่นๆ นักพัฒนาบางคนแนะนำว่า API ของ C# ให้ทั้งความเร็วในการพัฒนาและประสิทธิภาพในการทำงานโดยไม่ต้องใช้ภาษาเพิ่มเติมสำหรับส่วนที่ต้องการประสิทธิภาพสูง JavaScript กับ runtime สมัยใหม่อย่าง Bun ก็ถูกกล่าวถึงเป็นทางเลือกที่เป็นไปได้สำหรับการพัฒนาอย่างรวดเร็ว แม้ว่าความคิดเห็นจะแตกต่างกันว่าจริงๆ แล้วมันให้ข้อได้เปรียบเหนือ PHP ในสถานการณ์จริงหรือไม่

สรุป

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

อ้างอิง: The Rise of Hybrid PHP: Blending PHP with Go and Rust