ชุมชน 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