前端工程化: vite與webpack的優(yōu)缺點對比

一、前語

前端工程領(lǐng)域最近一年出了不少新的工具,這些新工具都運用了一些新技術(shù)或者跨領(lǐng)域技術(shù),在性能上實現(xiàn)了一些突破,為開發(fā)者帶來更快更好用的開發(fā)體驗。

二、背景

在瀏覽器支持原生 ES 模塊之前,JavaScript 并沒有提供的原生機制讓開發(fā)者以模塊化的方式進行開發(fā)。于是Webpack、Rollup等構(gòu)建式打包工具應(yīng)運而生,它們極大地改善了前端開發(fā)者的開發(fā)效率。

但隨著我們的應(yīng)用不斷迭代,我們需要處理的 JavaScript 代碼量也呈指數(shù)級增長,包含數(shù)千個模塊的大型項目相當(dāng)普遍。

隨著應(yīng)用的迭代,我們開始遇到性能瓶頸 —— 使用 JavaScript 開發(fā)的工具通常需要等80s+甚至更長時間才能啟動開發(fā)服務(wù)器。

啟動開發(fā)服務(wù)器后即使使用了 HMR(Hot Module Replacement),文件修改后的效果也需要等待幾秒鐘才能在瀏覽器中反映出來。

如此循環(huán)往復(fù),遲鈍的反饋會極大地影響開發(fā)者的開發(fā)效率以及體驗。

三、關(guān)于vite

Vite[1]是一種全新的前端構(gòu)建工具。你可以把它理解為一個開箱即用的開發(fā)服務(wù)器 + 打包工具的組合,但是更輕更快。Vite 利用瀏覽器原生支持的 ES 模塊和用編譯到原生的語言開發(fā)的工具(esbuild)[2]來提供一個快速且現(xiàn)代的開發(fā)體驗。

Vite主要具有以下特點:

  1. 快速的冷啟動

  2. 即時的模塊熱更新

  3. 真正的按需編譯

四、vite相較于webpcak的優(yōu)缺點

  1. 優(yōu)勢
  • 快速的啟動速度

Webpack 等傳統(tǒng)的構(gòu)建式打包工具,在冷啟動開發(fā)服務(wù)器時,首先都會將我們的整個代碼庫中的源代碼和node_modules進行轉(zhuǎn)換、編譯(Babel、PostCSS...)和打包,最終將打包好的文件推送到我們的瀏覽器。

vite、snowpack這類非構(gòu)建式打包工具,在冷啟動開發(fā)服務(wù)器時,無需分析模塊依賴,也不需要編譯,通過ES Module 自動向依賴的資源發(fā)出請求,因此啟動速度非常快。當(dāng)瀏覽器請求某個模塊時,再根據(jù)需要對模塊內(nèi)容進行編譯。這種按需動態(tài)編譯的方式,極大的縮減了編譯時間,項目越復(fù)雜、模塊越多,非構(gòu)建式打包工具的優(yōu)勢越明顯。

image
  • 即時響應(yīng)的熱更新

在 Webpack 中,當(dāng)代碼某個依賴發(fā)生了改變,webpcak 會檢查當(dāng)前的依賴關(guān)系并重新打包,當(dāng)我們的依賴關(guān)系復(fù)雜時,就算只修改一個文件,熱更新的速度也會越來越慢。在實踐中我們發(fā)現(xiàn),即使是 HMR ,更新速度會隨著應(yīng)用規(guī)模的增長而顯著下降。

在 Vite 中,HMR 是在原生 ESM 上執(zhí)行的。當(dāng)編輯一個文件時,Vite 只需要精確地使已編輯的模塊與其最近的 HMR 邊界之間的鏈?zhǔn)Вù蠖鄶?shù)時候只需要模塊本身),使 HMR 更新始終快速,無論應(yīng)用的大小。同時 Vite 利用 HTTP 來加速整個頁面的重新加載,對于源碼模塊的請求會根據(jù) 304 狀態(tài)碼進行協(xié)商緩存,而外部依賴模塊的請求則會設(shè)置為強緩存,因此一旦被緩存它們將不需要再次請求。

image
image

Vite 與create-react-app在 Repl.it 上啟動 React 應(yīng)用程序的視頻比較:

video link (twitter)

  1. 缺點
  • 生態(tài)

生態(tài)這一塊,Webpack 相較于 Vite 優(yōu)勢明顯,Webpcak 的社區(qū)中有非常豐富的loader和plugin,Vite這邊插件社區(qū)起步較晚,插件數(shù)量會比較少;

好在,Vite 插件開發(fā)起來非常簡單。Vite 在插件設(shè)計上擴展了 Rollup 的插件接口,開發(fā)者通過閱讀 Rollup 的插件文檔,很快就能開發(fā)出標(biāo)準(zhǔn)的 Vite 插件了。

  • 打包構(gòu)建

在構(gòu)建這塊,Vite 在開發(fā)服務(wù)器與產(chǎn)品最終構(gòu)建結(jié)果沒有 Webpack 一致性強。

主要原因是我們?yōu)榱嗽谏a(chǎn)環(huán)境獲得最佳的加載性能和兼容性,還是需要將代碼進行tree-shaking、懶加載和 chunk 分割(以獲得更好的緩存),所以 Vite 選擇了 Rollup[3] 進行產(chǎn)品最終構(gòu)建打包。

五、vite在vue中的使用姿勢

Vite 將為 Vue 提供第一優(yōu)先級支持

  1. vue@2.x + vite:vue-cli-plugin-vite
  2. vue@3.x + vite: @vitejs/plugin-vue
  3. vue@3.x + JSX + vite: @vitejs/plugin-vue-jsx

六、標(biāo)注

  1. vite
  2. esbuild
  3. rollup
  4. awesome-vite
  5. video link (twitter)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內(nèi)容