10 điểm bởi xguru 2024-07-04 | 1 bình luận | Chia sẻ qua WhatsApp
  • Mako là công cụ build frontend dựa trên Rust, "rất nhanh" và ở mức "production-grade"
  • Ra mắt vào 2023.3 và được mã nguồn mở sau 1 năm
  • Dự án được bắt đầu vì cần tốc độ build "rất nhanh"
  • Cách diễn đạt "production-grade" là vì từ 2023.11.24, Mako đã được phát hành chính thức trong nội bộ Ant Group (trước đây là Alipay)
    • Đã được kiểm chứng qua hàng nghìn dự án cùng nhiều gói npm và phiên bản khác nhau được sử dụng trong đó

Lý do phát triển Mako

  • Năm ngoái (2023.3), đội ngũ đã khởi động 3 dự án là Rust, SSR và AIG, và chọn Rust để giải quyết vấn đề hiệu năng build
  • Lý do không dùng các công cụ Rust hiện có mà quyết định tự xây là vì tính phức tạp
    1. Mức độ trưởng thành của thư viện cộng đồng và khả năng tương thích với yêu cầu của Ant
    2. Cần có quyền kiểm soát (do lý do kinh doanh nên việc tùy biến sâu là bắt buộc)
    3. Meta framework hiện đại không chỉ cần build mà còn cần framework ở thời gian biên dịch. Đặc biệt trong các kịch bản SSR và RSC, cần rất nhiều bước biên dịch
    4. Nhu cầu học Rust và phát triển năng lực của đội ngũ
  • Dòng thời gian của Mako: kickoff vào 2023.3, phiên bản khả dụng đầu tiên vào 2023.7, phát hành nội bộ tại Ant vào 2023.11, và mã nguồn mở vào 2024.6

Tốc độ

  • Mako đã đầu tư rất nhiều vào tốc độ. Dữ liệu benchmark như sau
    • Chạy benchmark trên dự án cũng dùng để thử nghiệm Turbopack, trên Mac Book Pro M2 Max
    • Bao gồm các khía cạnh như thời gian dev cold start, thời gian HMR cho root node và leaf node, thời gian production build, kích thước JS bundle, v.v.
  • So với phiên bản trước, kết quả như sau
    • Khi build toàn bộ dự án Ant Design Pro, Webpack mất 16 giây còn Mako mất 3.9 giây, nhanh hơn 4 lần
    • Khi build toàn bộ dự án Ant Design Pro, Mako có hot update gần như theo thời gian thực
    • Khi build dự án Smallfish, một framework hybrid intranet dựa trên RSC, thời gian build của dự án scaffold đã giảm từ 36.7 giây xuống 1.2 giây
  • Ngoài ra, Mako cũng có tính năng SSU mang tính thử nghiệm, tương tự cách triển khai MFSU trước đây, thực hiện đóng gói và cache các dependency
    • Tùy theo tỷ lệ dependency so với mã nguồn, có thể tăng tốc 10~50 lần khi hot start-up trong môi trường dev

1 bình luận

 
xguru 2024-07-04
Ý kiến trên Hacker News
  • Có thể hiệu năng kém hơn khi so với esbuild hoặc swc

    • Trong hệ sinh thái JavaScript, nhiều công cụ chậm và nhiều lỗi nên cần có giải pháp thay thế
    • So với các công cụ native thì lợi ích ngày càng giảm dần
  • Công cụ này hỗ trợ các tính năng không tiêu chuẩn nên có thể khiến người dùng bị phụ thuộc vào một bundler cụ thể

    • Các dự án có thể chạy mà không cần bundler sẽ tốt hơn
    • Nên dùng bundler như một bước tối ưu hóa
  • Tính năng chính của Vite là tận dụng hệ thống plugin sẵn có của rollup

    • Không rõ có kế hoạch xây dựng một lớp tương thích cho hệ sinh thái hiện có hay không
    • Các công cụ build khác cũng đang làm điều này (ví dụ: rspack dùng plugin webpack, farm dùng plugin vite)
  • Vì tiêu đề có chữ "Rust" nên tưởng đây là trình biên dịch Rust cho web

    • Thực ra đây là một bundler khác cho JavaScript
    • Được xây dựng bằng Rust
  • Không phải nhà phát triển web nên vẫn chưa rõ bundler thực sự làm gì

    • Cần thêm thông tin về chính xác bundler làm gì
    • Cũng thắc mắc vì sao lại tập trung vào tốc độ đến vậy (ví dụ: giải quyết phiên bản package?)
  • Không phải nhà phát triển web nhưng vẫn thường xuyên làm web app

    • Thắc mắc mục đích của bundler là gì trong chu kỳ phát triển nhanh
    • Để web app tải nhanh, tốt hơn là chỉ tải lại những phần đã thay đổi
    • Không bundling có lẽ còn tốt hơn
  • Rspack (ByteDance) đã phát hành phiên bản 1.0

    • Cũng có Farm
    • Do Ant Group tạo ra
    • Có rất nhiều công cụ build được xây dựng bằng Rust
    • Turbopack hướng tới việc xây dựng lại hoàn toàn bundling
    • Rolldown có vẻ là bản xây dựng lại rollup dựa trên Rust
  • Một bundler JavaScript dựa trên Rust thú vị khác là Oxid / OXC

  • Tò mò không biết điều gì sẽ xảy ra khi bundling chạm đến giới hạn của nó

    • Nếu đạt được hiệu năng ở mức mili giây như esbuild thì có thể làm được nhiều việc sáng tạo
    • Nếu mỗi trình duyệt có một WASM mako hoặc bundler nhỏ thì sẽ rất thú vị
    • Có vẻ đã có rất nhiều công sức được đầu tư vào đây
  • Tò mò không biết nó có liên quan đến MakoTemplates hay không