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

一、前語

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

二合愈、背景

在瀏覽器支持原生 ES 模塊之前,JavaScript 并沒有提供的原生機(jī)制讓開發(fā)者以模塊化的方式進(jìn)行開發(fā)击狮。于是Webpack佛析、Rollup等構(gòu)建式打包工具應(yīng)運(yùn)而生,它們極大地改善了前端開發(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進(jìn)行轉(zhuǎn)換、編譯(Babel牢屋、PostCSS...)和打包且预,最終將打包好的文件推送到我們的瀏覽器。

vite伟阔、snowpack這類非構(gòu)建式打包工具辣之,在冷啟動開發(fā)服務(wù)器時,無需分析模塊依賴皱炉,也不需要編譯怀估,通過ES Module 自動向依賴的資源發(fā)出請求,因此啟動速度非澈辖粒快多搀。當(dāng)瀏覽器請求某個模塊時,再根據(jù)需要對模塊內(nèi)容進(jìn)行編譯灾部。這種按需動態(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)碼進(jìn)行協(xié)商緩存增炭,而外部依賴模塊的請求則會設(shè)置為強(qiáng)緩存,因此一旦被緩存它們將不需要再次請求拧晕。

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è)計上擴(kuò)展了 Rollup 的插件接口,開發(fā)者通過閱讀 Rollup 的插件文檔臭墨,很快就能開發(fā)出標(biāo)準(zhǔn)的 Vite 插件了赔嚎。

  • 打包構(gòu)建

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

主要原因是我們?yōu)榱嗽谏a(chǎn)環(huán)境獲得最佳的加載性能和兼容性尤误,還是需要將代碼進(jìn)行tree-shaking、懶加載和 chunk 分割(以獲得更好的緩存)结缚,所以 Vite 選擇了 Rollup[3] 進(jìn)行產(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)系作者
  • 序言:七十年代末尤勋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茵宪,更是在濱河造成了極大的恐慌最冰,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眉厨,死亡現(xiàn)場離奇詭異锌奴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)憾股,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鹿蜀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箕慧,“玉大人,你說我怎么就攤上這事茴恰〉呓梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵往枣,是天一觀的道長伐庭。 經(jīng)常有香客問我,道長分冈,這世上最難降的妖魔是什么圾另? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮雕沉,結(jié)果婚禮上集乔,老公的妹妹穿的比我還像新娘。我一直安慰自己坡椒,他們只是感情好扰路,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倔叼,像睡著了一般汗唱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丈攒,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天哩罪,我揣著相機(jī)與錄音,去河邊找鬼肥印。 笑死识椰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的深碱。 我是一名探鬼主播腹鹉,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼敷硅!你這毒婦竟也來了功咒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绞蹦,失蹤者是張志新(化名)和其女友劉穎力奋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幽七,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡景殷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猿挚。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡咐旧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绩蜻,到底是詐尸還是另有隱情铣墨,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布办绝,位于F島的核電站伊约,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏孕蝉。R本人自食惡果不足惜屡律,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望降淮。 院中可真熱鬧疹尾,春花似錦、人聲如沸骤肛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腋颠。三九已至,卻和暖如春吓笙,著一層夾襖步出監(jiān)牢的瞬間淑玫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工面睛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留絮蒿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓叁鉴,卻偏偏與公主長得像土涝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幌墓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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