- คอมไพเลอร์ที่แปลงโปรแกรม Python เป็น WebAssembly
- ทำงานได้เร็วกว่า CPython(WASM) 3 เท่า เพราะตัดโอเวอร์เฮดของอินเทอร์พรีเตอร์ออกไป
- เมื่อเทียบกับ CPython(Native) จะมีความเร็วประมาณ 60%
- มีหลายวิธีในการรัน Python บน WebAssembly ให้เร็วขึ้น
- ใช้ชุดย่อยของ Python ที่สามารถคอมไพล์เป็นโค้ดประสิทธิภาพสูงได้: CPython, RPython(PyPy) และ Codon
- ใช้ JIT ภายใน Python: PyPy
- ปรับแต่งโค้ดที่สร้างขึ้นด้วยการวิเคราะห์แบบสถิต: mypy & mypy-c, Nuitka
- สุดท้ายจึงตัดสินใจใช้ Nuitka ซึ่งเป็นคอมไพเลอร์เพิ่มประสิทธิภาพสำหรับ Python
Nuitka
- Nuitka ทำงานโดยแปลงการเรียก Python ที่โปรแกรมทำงานอยู่ให้เป็น C ผ่านการเรียกใช้ CPython API ภายใน
- รองรับโปรแกรม Python ส่วนใหญ่ และแปลงโค้ด Python ให้เป็นการเรียกใช้ CPython ดังกล่าว
- ยังสามารถทำหน้าที่เป็นตัวทำโค้ดให้อ่านยากได้ด้วย (ไม่มีใครดีคอมไพล์โปรแกรมได้!)
- หลังจากวิเคราะห์ทุกตัวเลือกอย่างละเอียด ก็พบว่าวิธีที่เร็วที่สุดในการรัน Python บน WebAssembly น่าจะเป็นการใช้ Nuitka
คอมไพล์ Python เป็น WebAssembly ด้วย Nuitka
- เนื่องจาก Nuitka ทำงานส่วนใหญ่ในการแปลงโค้ด Python ไปเป็นการเรียกใช้อินเทอร์พรีเตอร์ CPython พื้นฐานไว้แล้ว จึงดูเป็นตัวเลือกที่ง่ายที่สุดในการเพิ่มความเร็วของ Python ในบริบทของ WebAssembly
- Nuitka ยังไม่รองรับ Python 3.12 จึงต้องคอมไพล์ Python 3.11 สำหรับ WASI ใหม่ และใช้ไฟล์ archive
libpython.a ที่ได้
- เมื่อลองรันไฟล์ Wasm ที่สร้างขึ้น ก็พบปัญหาอีกอย่าง จึงได้ส่ง PR เพื่ออัปสตรีมการเปลี่ยนแปลงไปยัง Nuitka
- ตอนนี้ py2wasm ใช้ฟอร์กของ Nuitka อยู่ แต่เมื่อการเปลี่ยนแปลงถูกรวมเข้าอัปสตรีมแล้ว ก็มีแผนจะทำให้ py2wasm เป็นเลเยอร์บาง ๆ บน Nuitka
- ความต้องการเริ่มต้นของเราคือเร่งความเร็วการรัน Python ให้ได้มากที่สุด เพื่อย้าย Django backend ของ Python จาก Google Cloud ไปยัง Wasmer Edge
- py2wasm จะช่วยให้เข้าใกล้การรันแอป backend ของ Python บน Edge ด้วยประสิทธิภาพที่น่าทึ่งมากขึ้นอีกก้าว และช่วยให้สามารถเสนอทางเลือกที่ถูกกว่ามากสำหรับการโฮสต์แอปเหล่านี้เมื่อเทียบกับผู้ให้บริการคลาวด์ในปัจจุบัน
โรดแมปในอนาคต
ยังไม่มีความคิดเห็น