作者 | Rspack Team??
Rspack 是由 ByteDance Web Infra 團隊孵化的基于 Rust 語言開發(fā)的 Web 構建工具,擁有高性能、兼容 Webpack 生態(tài)、定制性強等多種優(yōu)點,解決了我們在業(yè)務場景中遇到的非常多的問題,讓很多開發(fā)者的體驗有了質的提升。
(資料圖片)
倉庫地址:https://github.com/web-infra-dev/rspack
Quick Start:https://rspack.dev/guide/quick-start.html
官網(wǎng):https://rspack.dev
為什么要做 Rspack ?
字節(jié)跳動內部存在非常多的大型前端應用,它們有著非常復雜的構建配置,十幾分鐘甚至半小時的構建耗時,我們嘗試了多種方法去優(yōu)化這些項目的編譯速度,但是社區(qū)內存在的方案都或多或少存在一些問題,在對這些問題總結后,我們理解到工程師對構建工具的訴求是:
良好的 Dev 啟動性能,
npm run dev
是開發(fā)者每天需要運行很多次的命令,大型項目每次都需要等待 10 分鐘,這對于工程師來說是非常痛苦的,所以優(yōu)化 dev start 的時間是非常重要的;
良好的 Build 性能,
npm run build
是在 CI/CD 環(huán)境中經常運行的指令,他決定了應用生產交付的效率,在生產環(huán)境中有些應用經常需要 20 ~ 30 分鐘的構建時間,如果能縮短這里的耗時對開發(fā)鏈路也會非常有幫助;
足夠靈活的配置,用戶工程的配置靈活多變,并沒有做到完全的統(tǒng)一,在之前嘗試將 Webpack 配置遷移到其他構建工具的過程中我們就遇到了非常多的問題,他們的配置都很難達到 Webpack 的靈活程度;
生產環(huán)境的產物優(yōu)化能力,在啟動 Rspack 之前,我們實踐了社區(qū)內的各種方案,但是他們都面臨了生產環(huán)境一定程度負優(yōu)化的情況,例如拆包拆的不夠精細等等。所以生產環(huán)境產物優(yōu)化是我們不可舍棄的功能點。
在明確這四點之后,我們調研了社區(qū)內的所有技術方案,發(fā)現(xiàn)并沒有完全滿足我們需求的,所以我們決定自研 Rspack。
目前 Rspack 是什么階段
到今天為止 Rspack 已經開發(fā) 11 個月左右的時間了,雖然還處于比較早期的階段,但是在我們驗證中, Rspack 可以給項目帶來 5 ~ 10 倍的編譯效率提升,并且隨著我們內置了越來越多的常見 features,性能也在逐步的提升中。
目前 Rspack 已經完成了 Webpack Loader 架構的支持,你可以在 Rspack 中使用很多你之前見到的 Loader,如 babel-loader、less-loader、svgr 等等。我們長期的目標是完整支持 Loader,未來可以直接在 Rspack 中使用社區(qū)內的 vue-loader。
當下 Rspack 對緩存的支持還比較簡單,只有內存級別的緩存,未來我們會建設更強的緩存能力,包括可以寫入硬盤的緩存,并且我們會把緩存做到可以跨設備共享和遷移,提升大型應用的緩存復用率。
Rspack 作為一個較為底層的基礎設施,需要通過和社區(qū)內的各種上層框架結合才能在開發(fā)中獲得發(fā)揮作用,目前 Rspack 已經接入了字節(jié)內的各種研發(fā)框架,外部的合作將逐漸開始,現(xiàn)已與 webpack 建立正式合作關系。
未來計劃
完善基礎能力
Rspack 雖然目前提供的能力能夠滿足大多數(shù)的項目使用,但是相比 Webpack 提供的豐富能力仍然相差很多,我們在未來會根據(jù)社區(qū)反饋,豐富 Rspack 的基礎能力,滿足更多的構建場景需求。
Rspack 作為一個底層依賴解決了我們自己在工作中遇到的很多問題,相信他也可以解決社區(qū)的問題。我們非常愿意給社區(qū)內的框架團隊一些支持,讓大家發(fā)揮出來 Rspack 真正的性能優(yōu)勢。
提升插件能力
目前 Rspack 已經基本支持了 Loader API,和較少的 Webpack Plugin API,有很多 API 因為會產生較大的性能問題影響,所以我們暫時沒有暴露,我們同時也在探索更高性能的插件通信方案,另外一部分 API 是因為我們精力問題暫時沒有完成,歡迎大家 PR。在未來,我們會考慮提供高性能的動態(tài)插件方案,這些插件可以在提供自由定制的功能的同時,帶給開發(fā)者更好的開發(fā)體驗。
持續(xù)提升性能
目前 Rspack 是以性能為核心賣點的項目,所以在未來我們會做很多的事情以保持這個特性,如完善性能觀測實驗室,做好性能防劣化的工作;在更多的場景中使用并發(fā)/多核友好的算法;研發(fā)可跨平臺共享的緩存體系;優(yōu)化內存占用等等。
建設質量保障體系
在保障性能的同時,我們也會努力去保障 Rspack 的質量,Webpack 已經積累了非常豐富的測試用例,未來 Rspack 會復用 Webpack 已有的測試用例來完善自己的邏輯。建設更加完善的 CI 體系,和社區(qū)項目共建 Ecosystem CI 體系,保障項目升級不對上游的項目造成break,保障項目長期健康,并且在測試覆蓋率上保障長期上升。
根據(jù)我們過去使用 Webpack 的經驗,升級構建工具是一件耗時耗力的操作,我們也要請大家?guī)椭覀冐暙I更多的測試用例,Rspack 會在迭代中盡量保持兼容。
關鍵詞: