Mako - 빠르고, 프로덕션에서 사용가능한 Rust기반 웹 번들러
(makojs.dev)- Mako는 Rust 기반의 "매우 빠른" 그리고 "production-grade" 프론트엔드 빌드 도구
- 2023.3에 출시되었고, 1년 만에 오픈소스화 됨
- "매우 빠른" 빌드 속도가 필요해서 프로젝트를 시작함
- "production-grade"라는 표현은 2023.11.24부터 Mako가 Ant Group(예전 알리페이) 내부에서 공식 출시되었기 때문
- 수천 개 프로젝트와 그 안에서 사용된 다양한 npm 패키지 및 버전으로 검증되었음
Mako의 개발 이유
- 작년(2023.3)에 팀에서 Rust, SSR, AIG 3개 프로젝트를 시작했고, 빌드 성능 문제를 해결하기 위해 Rust를 선택
- 기존 Rust 도구를 사용하지 않고 직접 만들기로 한 이유는 복잡함
- 커뮤니티 라이브러리의 성숙도와 Ant의 요구사항과의 호환성
- 제어권을 가질 필요가 있음(비즈니스적 이유로 많은 커스터마이징이 필수)
- 모던 메타 프레임워크가 빌드 외에도 컴파일 시간 프레임워크를 필요로 함. 특히 SSR 및 RSC 시나리오에서 많은 컴파일이 필요
- Rust를 배우고 팀이 성장할 필요성
- Mako의 타임라인 : 2023.3에 킥오프, 2023.7에 첫 사용 가능한 버전, 2023.11에 Ant에서 내부 출시, 2024.6에 오픈소스화
속도
- Mako는 속도에 많은 노력을 기울였음. 벤치마크 데이터는 다음과 같음
- Mac Book Pro M2 Max에서 Turbopack도 테스트하는 프로젝트로 벤치마크를 실행함
- dev cold start 시간, root node와 leaf node HMR 시간, production Build 빌드 시간, JS bundle 크기 등의 차원을 포함함
- 이전 버전과 비교하면 다음과 같음
- Ant Design Pro 전체 프로젝트 빌드 시 Webpack은 16초, Mako는 3.9초로 4배 속도 향상
- Ant Design Pro 전체 프로젝트 빌드 시 Mako는 거의 실시간 hot update임
- RSC 기반 인트라넷 Hybrid 프레임워크 Smallfish 프로젝트 빌드 시 스캐폴드 프로젝트의 빌드 시간이 36.7초에서 1.2초로 단축됨
- 또한 Mako는 실험적인 SSU 기능도 있는데, 이전 MFSU 구현과 유사하게 의존성 패키징 및 캐싱을 수행함
- 소스 코드 대비 의존성 비율에 따라 Dev hot start-up 시 10~50배 속도 향상 가능
Hacker News 의견
-
esbuild나 swc와 비교했을 때 성능이 떨어질 수 있음
- JavaScript 생태계에서 많은 도구들이 느리고 버그가 많아 대안이 필요함
- 네이티브 도구와 비교하면 점점 수익이 감소함
-
이 도구는 비표준 기능을 지원하여 특정 번들러에 종속될 수 있음
- 번들러 없이도 작동하는 프로젝트가 더 좋음
- 번들러는 최적화 단계로 사용하는 것이 좋음
-
Vite의 주요 기능은 rollup의 기존 플러그인 시스템을 활용하는 것임
- 기존 생태계를 위한 호환 레이어를 구축할 계획이 있는지 궁금함
- 다른 빌드 도구들도 이를 하고 있음 (예: rspack은 webpack 플러그인 사용, farm은 vite 플러그인 사용)
-
제목에 "Rust"가 있어서 웹용 Rust 컴파일러인 줄 알았음
- JavaScript용 또 다른 번들러임
- Rust로 구축됨
-
웹 개발자가 아니어서 번들러가 실제로 무엇을 하는지 혼란스러움
- 번들러가 정확히 무엇을 하는지에 대한 정보가 필요함
- 속도에 중점을 두는 이유는 무엇인지 궁금함 (예: 패키지 버전 해결?)
-
웹 개발자가 아니지만 웹 앱을 정기적으로 개발함
- 빠른 개발 주기에서 번들러의 목적이 무엇인지 궁금함
- 웹 앱이 빠르게 로드되려면 변경된 부분만 다시 다운로드하는 것이 좋음
- 번들링하지 않는 것이 더 나음
-
Rspack (ByteDance)이 1.0 버전을 출시함
- Farm도 있음
- Ant Group에서 만든 것임
- Rust로 구축된 많은 빌드 도구들이 있음
- Turbopack은 번들링의 완전한 재구축을 목표로 함
- Rolldown은 Rust 기반의 roll-up 재구축으로 보임
-
또 다른 흥미로운 Rust 기반 JavaScript 번들러는 Oxid / OXC임
- OXC 프로젝트 GitHub 링크
- OXC 공식 사이트
- Rolldown은 개발 중인 번들러를 OXC에 기반하고 있음
-
번들링의 한계에 도달하면 어떻게 될지 궁금함
- esbuild처럼 ms 단위의 성능에 도달하면 창의적인 작업을 할 수 있음
- 각 브라우저에 작은 WASM mako나 번들러가 있다면 매우 흥미로울 것임
- 많은 노력이 들어간 것처럼 보임
-
MakoTemplates와 관련이 있는지 궁금함