- Mako เป็นเครื่องมือ build ฝั่งฟรอนต์เอนด์บน Rust ที่ "เร็วมาก" และ "production-grade"
- เปิดตัวในเดือน 2023.3 และกลายเป็นโอเพ่นซอร์สหลังจากนั้น 1 ปี
- เริ่มโครงการนี้ขึ้นมาเพราะต้องการความเร็วในการ build ระดับ "เร็วมาก"
- คำว่า "production-grade" หมายถึงตั้งแต่ 2023.11.24 เป็นต้นมา Mako ได้เปิดใช้งานอย่างเป็นทางการภายใน Ant Group (เดิมคือ Alipay)
- ผ่านการพิสูจน์แล้วจากโปรเจกต์หลายพันรายการ รวมถึงแพ็กเกจ npm และเวอร์ชันที่หลากหลายที่ใช้งานภายในนั้น
เหตุผลที่พัฒนา Mako
- เมื่อปีที่แล้ว (2023.3) ทีมได้เริ่ม 3 โครงการคือ Rust, SSR และ AIG และเลือก Rust เพื่อแก้ปัญหาด้านประสิทธิภาพการ build
- เหตุผลที่ไม่ใช้เครื่องมือ Rust ที่มีอยู่เดิมและเลือกสร้างเองคือความซับซ้อน
- ระดับความพร้อมของไลบรารีในชุมชนและความเข้ากันได้กับความต้องการของ Ant
- จำเป็นต้องมีอำนาจควบคุมเอง (ด้วยเหตุผลทางธุรกิจจึงต้องมีการปรับแต่งจำนวนมาก)
- เมตาเฟรมเวิร์กสมัยใหม่ต้องการเฟรมเวิร์กระหว่างคอมไพล์นอกเหนือจากการ build โดยเฉพาะในสถานการณ์ SSR และ RSC ที่ต้องมีการคอมไพล์จำนวนมาก
- ความจำเป็นในการเรียนรู้ Rust และการเติบโตของทีม
- ไทม์ไลน์ของ Mako: เริ่มโครงการใน 2023.3, มีเวอร์ชันใช้งานได้ครั้งแรกใน 2023.7, เปิดใช้ภายใน Ant ใน 2023.11 และโอเพ่นซอร์สใน 2024.6
ความเร็ว
- Mako ทุ่มเทอย่างมากกับเรื่องความเร็ว โดยมีข้อมูล benchmark ดังนี้
- รัน benchmark บนโปรเจกต์ที่ใช้ทดสอบ Turbopack ด้วย บน Mac Book Pro M2 Max
- ครอบคลุมมิติอย่างเวลา dev cold start, เวลา HMR ของ root node และ leaf node, เวลา production build และขนาด JS bundle
- เมื่อเทียบกับเวอร์ชันก่อนหน้า มีดังนี้
- เมื่อ build โปรเจกต์ Ant Design Pro ทั้งโปรเจกต์ Webpack ใช้เวลา 16 วินาที ส่วน Mako ใช้ 3.9 วินาที เร็วขึ้น 4 เท่า
- เมื่อ build โปรเจกต์ Ant Design Pro ทั้งโปรเจกต์ Mako ให้ hot update ได้เกือบเรียลไทม์
- เมื่อ build โปรเจกต์ Smallfish ซึ่งเป็นอินทราเน็ต Hybrid framework ที่อิงกับ RSC เวลา build ของโปรเจกต์ scaffold ลดลงจาก 36.7 วินาทีเหลือ 1.2 วินาที
- นอกจากนี้ Mako ยังมีฟีเจอร์ทดลองชื่อ SSU ซึ่งคล้ายกับการทำงานของ MFSU แบบเดิม โดยทำ dependency packaging และ caching
- สามารถเพิ่มความเร็วในการ Dev hot start-up ได้ 10~50 เท่า ขึ้นอยู่กับสัดส่วนของ dependency เทียบกับซอร์สโค้ด
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
ประสิทธิภาพอาจด้อยกว่าเมื่อเทียบกับ esbuild หรือ swc
เครื่องมือนี้รองรับฟีเจอร์ที่ไม่เป็นมาตรฐาน จึงอาจทำให้ต้องผูกติดกับ bundler ตัวใดตัวหนึ่ง
ฟีเจอร์หลักของ Vite คือการใช้ระบบปลั๊กอินเดิมของ rollup
เห็นคำว่า "Rust" ในหัวข้อแล้วนึกว่าเป็นคอมไพเลอร์ Rust สำหรับเว็บ
ไม่ใช่นักพัฒนาเว็บ จึงยังสับสนว่า bundler ทำอะไรจริงๆ
ไม่ใช่นักพัฒนาเว็บ แต่พัฒนาเว็บแอปเป็นประจำ
Rspack (ByteDance) ออกรุ่น 1.0 แล้ว
JavaScript bundler บนพื้นฐาน Rust ที่น่าสนใจอีกตัวคือ Oxid / OXC
สงสัยว่าจะเกิดอะไรขึ้นเมื่อการ bundling ไปถึงขีดจำกัด
สงสัยว่าเกี่ยวข้องกับ MakoTemplates หรือไม่