9 คะแนน โดย xguru 2024-05-27 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • ปัจจุบัน 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 -S localhost:8000 . ตอนนี้สามารถรันผ่าน Wasmer แบบ sandbox เต็มรูปแบบได้แล้ว:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • WordPress ก็รันบนเครื่องโลคัลได้ง่ายเช่นกัน หลังจาก clone รีโพซิทอรี WordPress แล้ว ให้รัน wasmer run . --net ที่ root (ต้องใช้ Wasmer 4.3.1)
  • มี PHP CLI แบบฟังก์ชันครบถ้วนที่รันบนเซิร์ฟเวอร์ในสภาพแวดล้อม sandbox เต็มรูปแบบ
  • ไม่ต้องกังวลอีกต่อไปว่าแอปจะเข้าถึงสิ่งอย่าง /etc/passwd

ความสำเร็จทางเทคนิค

  • การทำให้ 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 ความคิดเห็น

 
tsboard 2024-05-28

โดยส่วนตัวแล้วผมทั้งรู้สึกว่าน่าทึ่งและแปลกใจที่ PHP ยังถูกใช้งานอย่างคึกคักมาจนถึงทุกวันนี้ 555 หลังผ่านยุคที่เคยมีชื่อเสียงไม่ค่อยดีมา ตอนนี้เขาว่ากันว่ามันเปลี่ยนไปมากแล้ว จนทำให้นึกอยากกลับไปลองใช้ PHP อีกสักครั้งเหมือนกัน

 
xguru 2024-05-29

ทั้ง Hacker News และ GeekNews ก็ดูเหมือนจะมีคนไม่น้อยที่ไม่ชอบ PHP ฮ่าๆ
แต่ตราบใดที่เทคโนโลยีอย่างเว็บยังไม่ได้ถูกแทนที่ด้วยอย่างอื่นไปเลย ก็น่าจะยังถูกใช้งานต่อไปเรื่อยๆ นะครับ
ผมคิดว่าเราไม่ควรโฟกัสที่คำว่า "ภาษา" แต่ควรมองมันเป็นหนึ่งในเทคโนโลยีที่เหมาะกับ "เว็บ" มากกว่านะครับ