- ปัจจุบัน PHP คิดเป็นสัดส่วนประมาณ 75% ของเว็บไซต์บนอินเทอร์เน็ต
- PHP อาจไม่ใช่ภาษาโปรแกรมที่ "เซ็กซี่" ที่สุด แต่ก็มีบทบาทสำคัญมาตั้งแต่กำเนิดของอินเทอร์เน็ต
- ตอนนี้สามารถรัน PHP ได้อย่างสมบูรณ์บน Wasmer และ Wasmer Edge แล้ว (โอเพนเบตา)
ความสำคัญของการรัน PHP บน WebAssembly
- ด้วยคุณสมบัติของ WebAssembly จึงสามารถจำกัดทรัพยากรที่โปรแกรมเข้าถึงได้อย่างปลอดภัย
- รัน PHP ได้อย่างปลอดภัยโดยไม่มีโอเวอร์เฮดของการจำลองเสมือนระดับ OS หรือฮาร์ดแวร์
- ทีม Wasmer ลงทุนเวลาอย่างมากเพื่อให้ PHP ทำงานบน WebAssembly ได้อย่างสมบูรณ์และเร็วที่สุดเท่าที่จะเป็นไปได้
- เปิดใช้ opcode caching ภายใน WebAssembly เพื่อให้ได้ความเร็วเพิ่มขึ้นสูงสุด 3 เท่า
มอบความสามารถในการขยายแบบ serverless-like ให้กับแอป PHP
- การมอบความสามารถในการขยายแบบ serverless-like ให้กับทุกแอป PHP จะปลดล็อกคุณค่าได้อย่างมหาศาล
- สามารถรันแอป PHP ที่ Edge และจ่ายเพียงเศษเสี้ยวของราคาที่ผู้ให้บริการคลาวด์เรียกเก็บ
- สามารถรันแอปพลิเคชัน PHP ทั้งหมดด้วย Wasmer ได้ โดยไม่ต้องกังวลว่าแอปจะหลุดจาก sandbox แล้วไปทำสิ่งอันตรายที่ไม่ควรทำ
รันเฟรมเวิร์ก PHP ยอดนิยมที่สุดบน Wasmer และ Wasmer Edge ได้
- WordPress
- Symfony
- Laravel
- เทมเพลต PHP ทั้งหมด: https://wasmer.io/templates?language=php
- หมายเหตุ: การรองรับ custom file system volume บน Wasmer Edge กำลังอยู่ระหว่างดำเนินการ แอปที่ deploy แล้วซึ่งใช้ SQLite (เช่น WordPress หรือ Symfony) จะบันทึกการเปลี่ยนแปลงฐานข้อมูลไว้ในหน่วยความจำเท่านั้นในตอนนี้ และยังไม่บันทึกแบบถาวร
ใช้ WebAssembly และ PHP ให้คุ้มที่สุด
- เปิดใช้ opcode caching เพื่อให้ WordPress รันได้เร็วขึ้น 3 เท่าโดยไม่ต้องแก้ไขอะไรเลย (จาก 600ms เหลือ 200ms)
ลองด้วยตัวเอง
ความสำเร็จทางเทคนิค
- การทำให้ PHP ทำงานได้อย่างสมบูรณ์บน WebAssembly ด้วย Wasmer ไม่ใช่เรื่องง่าย
- ทีมได้ไล่แก้ปัญหามากมายตลอดกระบวนการ:
- พบบั๊กคลุมเครือที่ stack ถูกเขียนทับและกู้คืนกลับมาไม่ถูกต้อง ในการทำ longjmp/setjmp ที่จำเป็นต่อการใช้คำสั่ง try/catch ภายใน PHP
- พบบั๊กที่ทำให้ HTTP call ขาออกช้าลง 10 เท่า และแก้ไขได้สำเร็จ
- เปิดใช้ PHP opcache เป็นค่าเริ่มต้นเพื่อให้ PHP เร็วขึ้นสูงสุด 3 เท่า
- แก้ไขจุดเล็ก ๆ จำนวนมากในชั้น virtualized file system และระบบเครือข่าย (IPv6)
- หากเคยทำตามบล็อกโพสต์ก่อนหน้านี้เกี่ยวกับการรัน WordPress บน Wasmer คุณอาจทราบว่าต้องแก้โค้ดจำนวนมาก (หรือก็คือแฮ็ก) เพื่อเปลี่ยนพฤติกรรมใน WordPress และหลีกเลี่ยง edge case ที่ทำให้การทำงานติดขัด
- ใน Wasmer รุ่นล่าสุด WordPress, Laravel และ Symfony สามารถรันบน Wasmer ได้โดยไม่ต้องแก้โค้ดใด ๆ
ความเร็ว
- การรัน PHP ได้ที่ความเร็วพื้นฐานยังไม่เพียงพอ ทีมต้องการให้มันทำงานบน WebAssembly ได้เร็วที่สุดเท่าที่จะเป็นไปได้
- PHP มีโมดูล Zend Opcache ที่ช่วยให้การทำงานเร็วขึ้นมาก
- โมดูล opcode caching จะปรับแต่งและแคชไบต์โค้ดที่ได้จากการแปลงซอร์ส PHP เพื่อประหยัดเวลาในการ parse AST ของไฟล์ที่เคยประมวลผลแล้ว
- เนื่องจาก opcode caching สามารถเร่งจำนวน request ที่แอปรองรับได้สูงสุด 3 เท่า การเปิดใช้บน WebAssembly จึงดูเป็นเรื่องชัดเจน
- แต่ opcode caching (รวมถึงการโหลดโมดูล Zend) ถูกปิดไว้โดยค่าเริ่มต้น (เพราะต้องใช้ dlopen, dlsym ฯลฯ ซึ่งใช้บน Wasm ไม่ได้)
- จึงเริ่มภารกิจเฉพาะตัว: เปิดใช้ opcode caching ใน PHP
- หลังจากค้นคว้าอย่างหนัก ก็พบวิธีใหม่ในการลิงก์แบบสแตติก และแม้จะต้องแก้หลายจุดระหว่างทาง สุดท้ายก็ทำสำเร็จ
- เวลาของ WordPress บน Wasm แบบไม่มี Opcache: ~620ms
- เวลาของ WordPress บน Wasm เมื่อเปิดใช้ Opcache: ~205ms
- แค่เปิดใช้ Opcache ก็เพิ่มความเร็วได้ถึง 3 เท่า!
- ทีมยังตระหนักว่ายังมีการปรับปรุงอีกมากที่จะทำให้ PHP เข้าใกล้ความเร็วแบบเนทีฟมากขึ้น (โปรดติดตาม!)
เปิดโอกาสได้มากขึ้น
- เปิดโอกาสเพิ่มเติมให้กับโปรเจกต์ที่ปัจจุบันพึ่งพา Emscripten เพื่อรัน PHP ในเบราว์เซอร์ เช่น WordPress playground
- โปรเจกต์เหล่านี้อาจถูกสร้างเป็นแพ็กเกจที่รันได้ทั้งบนเบราว์เซอร์และ Edge
- กำลังเตรียมแนวทางใหม่แบบพลิกเกมสำหรับ cold-start (Cloudflare & Fly.io เรากำลังจับตาดูคุณอยู่!)
- ช่วงเวลาที่น่าตื่นเต้นกำลังมาถึงสำหรับตลาด Edge
2 ความคิดเห็น
โดยส่วนตัวแล้วผมทั้งรู้สึกว่าน่าทึ่งและแปลกใจที่ PHP ยังถูกใช้งานอย่างคึกคักมาจนถึงทุกวันนี้ 555 หลังผ่านยุคที่เคยมีชื่อเสียงไม่ค่อยดีมา ตอนนี้เขาว่ากันว่ามันเปลี่ยนไปมากแล้ว จนทำให้นึกอยากกลับไปลองใช้ PHP อีกสักครั้งเหมือนกัน
ทั้ง Hacker News และ GeekNews ก็ดูเหมือนจะมีคนไม่น้อยที่ไม่ชอบ PHP ฮ่าๆ
แต่ตราบใดที่เทคโนโลยีอย่างเว็บยังไม่ได้ถูกแทนที่ด้วยอย่างอื่นไปเลย ก็น่าจะยังถูกใช้งานต่อไปเรื่อยๆ นะครับ
ผมคิดว่าเราไม่ควรโฟกัสที่คำว่า "ภาษา" แต่ควรมองมันเป็นหนึ่งในเทคโนโลยีที่เหมาะกับ "เว็บ" มากกว่านะครับ