10 คะแนน โดย xguru 2024-07-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ที่มีอยู่เดิมและเลือกสร้างเองคือความซับซ้อน
    1. ระดับความพร้อมของไลบรารีในชุมชนและความเข้ากันได้กับความต้องการของ Ant
    2. จำเป็นต้องมีอำนาจควบคุมเอง (ด้วยเหตุผลทางธุรกิจจึงต้องมีการปรับแต่งจำนวนมาก)
    3. เมตาเฟรมเวิร์กสมัยใหม่ต้องการเฟรมเวิร์กระหว่างคอมไพล์นอกเหนือจากการ build โดยเฉพาะในสถานการณ์ SSR และ RSC ที่ต้องมีการคอมไพล์จำนวนมาก
    4. ความจำเป็นในการเรียนรู้ 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 ความคิดเห็น

 
xguru 2024-07-04
ความคิดเห็นใน Hacker News
  • ประสิทธิภาพอาจด้อยกว่าเมื่อเทียบกับ esbuild หรือ swc

    • ใน ecosystem ของ JavaScript มีเครื่องมือจำนวนมากที่ช้าและมีบั๊ก จึงต้องการทางเลือกอื่น
    • เมื่อเทียบกับเครื่องมือแบบ native ผลตอบแทนจะค่อยๆ ลดลง
  • เครื่องมือนี้รองรับฟีเจอร์ที่ไม่เป็นมาตรฐาน จึงอาจทำให้ต้องผูกติดกับ bundler ตัวใดตัวหนึ่ง

    • โปรเจ็กต์ที่ทำงานได้โดยไม่ต้องพึ่ง bundler จะดีกว่า
    • ควรใช้ bundler เป็นขั้นตอนสำหรับการปรับแต่งประสิทธิภาพ
  • ฟีเจอร์หลักของ Vite คือการใช้ระบบปลั๊กอินเดิมของ rollup

    • อยากรู้ว่ามีแผนจะสร้าง compatibility layer สำหรับ ecosystem เดิมหรือไม่
    • เครื่องมือ build อื่นๆ ก็ทำแบบนี้เช่นกัน (เช่น rspack ใช้ปลั๊กอิน webpack, farm ใช้ปลั๊กอิน vite)
  • เห็นคำว่า "Rust" ในหัวข้อแล้วนึกว่าเป็นคอมไพเลอร์ Rust สำหรับเว็บ

    • ที่จริงแล้วเป็น bundler สำหรับ JavaScript อีกตัวหนึ่ง
    • สร้างด้วย Rust
  • ไม่ใช่นักพัฒนาเว็บ จึงยังสับสนว่า bundler ทำอะไรจริงๆ

    • ต้องการข้อมูลว่า bundler คืออะไรอย่างชัดเจน
    • สงสัยว่าเหตุใดจึงให้ความสำคัญกับความเร็วมากนัก (เช่น การแก้เวอร์ชันแพ็กเกจ?)
  • ไม่ใช่นักพัฒนาเว็บ แต่พัฒนาเว็บแอปเป็นประจำ

    • สงสัยว่าจุดประสงค์ของ bundler ในรอบการพัฒนาที่รวดเร็วคืออะไร
    • หากต้องการให้เว็บแอปโหลดเร็ว ควรดาวน์โหลดใหม่เฉพาะส่วนที่เปลี่ยนแปลง
    • ไม่ทำ bundling น่าจะดีกว่า
  • Rspack (ByteDance) ออกรุ่น 1.0 แล้ว

    • ยังมี Farm ด้วย
    • สร้างโดย Ant Group
    • มีเครื่องมือ build จำนวนมากที่สร้างด้วย Rust
    • Turbopack มีเป้าหมายเพื่อสร้างระบบ bundling ขึ้นใหม่ทั้งหมด
    • Rolldown ดูเหมือนจะเป็นการสร้าง rollup ขึ้นใหม่บนพื้นฐานของ Rust
  • JavaScript bundler บนพื้นฐาน Rust ที่น่าสนใจอีกตัวคือ Oxid / OXC

  • สงสัยว่าจะเกิดอะไรขึ้นเมื่อการ bundling ไปถึงขีดจำกัด

    • หากทำประสิทธิภาพได้ถึงระดับมิลลิวินาทีแบบ esbuild ก็อาจทำสิ่งที่สร้างสรรค์ได้
    • ถ้าแต่ละเบราว์เซอร์มี WASM mako หรือ bundler ขนาดเล็กอยู่ภายในก็คงน่าสนใจมาก
    • ดูเหมือนว่าจะทุ่มเทความพยายามไปมาก
  • สงสัยว่าเกี่ยวข้องกับ MakoTemplates หรือไม่