0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ViteConf 2023:Vite即將Rust化挑戰(zhàn)

jf_wN0SrCdH ? 來(lái)源:浮之靜 ? 作者:lencx ? 2023-10-07 10:28 ? 次閱讀

ViteConf 干貨滿(mǎn)滿(mǎn),尤大的分享中最值得關(guān)注的就要數(shù) Rolldown 了,它為 Vite 現(xiàn)有痛點(diǎn)提供了新的解決方案。

Vite

Vite[2] 是支撐著全球增長(zhǎng)最快的前端生態(tài)系統(tǒng)的下一代構(gòu)建工具。

npm 每周下載量:7,200,000+

GitHub Stars:60,000+

2171c40e-6455-11ee-939d-92fbcf53809c.png

218425d6-6455-11ee-939d-92fbcf53809c.png

Vite 生態(tài)

Vite 正在迅速崛起為一個(gè)共享的基礎(chǔ)平臺(tái),吸引著越來(lái)越多的項(xiàng)目在其基礎(chǔ)上構(gòu)建和發(fā)展。令人興奮的是,這些項(xiàng)目不僅僅滿(mǎn)足于基礎(chǔ)應(yīng)用,而是在各自的領(lǐng)域中進(jìn)行著前所未有的創(chuàng)新。

Vite 妥善平衡了低級(jí)別復(fù)雜性的抽象和高級(jí)用戶(hù)及框架的靈活性。這不僅降低了入門(mén)門(mén)檻,提供了友好的開(kāi)發(fā)體驗(yàn),同時(shí)也確保了對(duì)于高級(jí)應(yīng)用和多變需求的充分支持。

Storybook v7 提供一流的 Vite 支持:預(yù)先捆綁以提高速度、零配置設(shè)置、無(wú)需 Webpack 以及更小的安裝大?。‵irst-class Vite support in Storybook[3])

Angular v16 使用 Vite 作為開(kāi)發(fā)服務(wù)器(Angular v16 is here![4])

Preact[5] 在 6 月份將默認(rèn)工具切換為 Vite,推薦使用 create-vite 來(lái)快速開(kāi)始一個(gè)項(xiàng)目

Redwood v6 完全構(gòu)建在 Vite 之上(RedwoodJS Vite Configuration[6])

Bun v0.7 開(kāi)始支持 Vite(bun vite support[7])

VitePress[8] 靜態(tài)網(wǎng)站生成器

與 Remix[9] 合作,探索向 Vite 遷移,已取得重大進(jìn)展

...

Vite 痛點(diǎn) & 挑戰(zhàn)

痛點(diǎn)

相對(duì)緩慢的生產(chǎn)構(gòu)建速度:目前仍使用 rollup 作為生產(chǎn)構(gòu)建,本地開(kāi)發(fā)使用 esbuild 或 Bun

開(kāi)發(fā)與生產(chǎn)環(huán)境之間的不一致:Vite 使用混合策略。開(kāi)發(fā)使用 esbuild 預(yù)構(gòu)建,使用 Native ES 模塊提供源代碼;生產(chǎn)使用 Rollup 來(lái)捆綁所有資產(chǎn),CommonJS 在處理和轉(zhuǎn)換時(shí)有時(shí)會(huì)出現(xiàn)輕微的不一致,最終導(dǎo)致難以調(diào)試。

開(kāi)發(fā)過(guò)程中存在未捆綁 ESM 的網(wǎng)絡(luò)開(kāi)銷(xiāo):如果開(kāi)發(fā)者項(xiàng)目中包含大量未捆綁 ESM 時(shí),網(wǎng)絡(luò)開(kāi)銷(xiāo)會(huì)大幅影響初始頁(yè)面加載速度。

混亂的 SSR 外部問(wèn)題

對(duì)代碼塊分割的有限控制:與 ES 構(gòu)建相比,雖然 Rollup 已經(jīng)提供了很大靈活性,但與 Webpack 的完全支持自定義相比,還是有些差距

缺乏首方模塊聯(lián)合(First-party Module Federation)支持:了解更多 Module Federation[10]

挑戰(zhàn)

大多數(shù)問(wèn)題需要在打包工具(bundler)層面解決(Vite 內(nèi)部有兩個(gè)捆綁器:esbuild 和 Rollup)

esbuild(或 Bun)速度極快,但:

對(duì)構(gòu)建資源優(yōu)化的控制非常有限:比如控制塊的分割方式

插件 API 不夠靈活:比如當(dāng)嘗試將多個(gè)插件連接在一起以處理同一文件類(lèi)型時(shí)

Rollup 成熟且靈活,但:

與原生打包工具相比仍然較慢

ESM/CJS 交互操作的處理可以改進(jìn)

兩個(gè)打包工具都無(wú)法完全替代對(duì)方,并且存在微妙的行為不一致性

Rolldown

尤大透露團(tuán)隊(duì)正在開(kāi)發(fā) Rolldown,它是 Rollup 的 Rust 移植版。目的并不是為了取代現(xiàn)有的工具 esbuild 或 Rollup,只是為了更好地滿(mǎn)足一些特定需求,使 Vite 用戶(hù)受益。

專(zhuān)注點(diǎn):在盡可能與 Rollup 兼容的前提下,重點(diǎn)關(guān)注性能

目標(biāo):在對(duì)終端用戶(hù)影響最小的前提下,在 Vite 中替換 esbuild 和 Rollup

它將為 Vite 提供:

顯著更快的生產(chǎn)構(gòu)建速度

更強(qiáng)的開(kāi)發(fā)/生產(chǎn)一致性

更穩(wěn)健的 SSR 依賴(lài)處理

更多關(guān)于代碼塊分割的控制

當(dāng)然,這將是一項(xiàng)龐大的工作!

目前狀態(tài):初步的工作進(jìn)行中?。ㄓ?jì)劃在年底前開(kāi)源)

核心貢獻(xiàn)者是前 rspack[11] 團(tuán)隊(duì)成員(rspack 是字節(jié)開(kāi)源的一個(gè)基于 rust 實(shí)現(xiàn)的前端打包工具,對(duì)標(biāo) Webpack)

與 rspack 團(tuán)隊(duì)合作,在 OXC[12] 基礎(chǔ)上進(jìn)行建設(shè)(Oxc 是一套為 JavaScript 和 TypeScript 創(chuàng)建的高性能工具,基于 Rust 實(shí)現(xiàn)。它正在構(gòu)建一個(gè)解析器、linter、格式化程序、轉(zhuǎn)譯器、壓縮器、解析器……)

與 @lukastaegert[13](rollup 核心維護(hù)者) 合作以確保與 Rollup 的一致性

如果 Vite 對(duì)你的使用場(chǎng)景來(lái)說(shuō)過(guò)于龐大,Rolldown 當(dāng)然也可以作為一個(gè)獨(dú)立的依賴(lài)項(xiàng)使用。它還可以提高 Vitest[14] 和 Nitro[15] 的性能。

Vite Roadmap

計(jì)劃將通過(guò)四個(gè)階段逐步完善和升級(jí)打包和構(gòu)建過(guò)程,最后將 Vite 的一部分功能通過(guò) Rust 和 Rolldown 進(jìn)行重寫(xiě)或優(yōu)化,以提高整體性能和提供更多的構(gòu)建模式。

階段 1:基礎(chǔ)打包

替換 esbuild 用于依賴(lài)預(yù)打包:CommonJS & 仿 ESM(faux-ESM)兼容性

階段 2:高級(jí)打包

與 Rollup 功能對(duì)齊:插件兼容性、Tree-shaking、高級(jí)代碼塊分割控制等

階段 3:內(nèi)置轉(zhuǎn)換

TypeScript

JSX

代碼壓縮(minification)

語(yǔ)法降級(jí)(syntax lowering)

階段 4:使用 Rust 重構(gòu) Vite

Rolldown 暴露插件容器作為 API

Vite 引入一個(gè)以 Rolldown 為依賴(lài)的 Rust 核心

使用 Rust 重構(gòu) Vite 內(nèi)部關(guān)鍵插件和 ssrLoadModule 轉(zhuǎn)換

提供與未捆綁 ESM(unbundled ESM)相對(duì)的全包模式(full-bundle mode)

Vite 版本日志

Vite 4.0 (2022.12)

升級(jí)到 Rollup 3(3.0.0 changelog[16])

最低 Node.js 要求:Rollup 現(xiàn)在至少需要 Node 14.18.0 來(lái)運(yùn)行。

插件和 API 更改:許多插件上下文函數(shù)和插件鉤子已被移除或修改。

新特性:包括按塊調(diào)用 output.banner/footer/intro/outro 的函數(shù),插件可以訪(fǎng)問(wèn)完整的塊圖表等。

構(gòu)建輸出:增加了關(guān)于動(dòng)態(tài)導(dǎo)入在 CommonJS 輸出中的處理,允許控制動(dòng)態(tài)導(dǎo)入在生成 CommonJS 輸出時(shí)是以 import(...) 還是包裝過(guò)的 require(...) 形式被輸出。

警告和棄用:一些之前被棄用的特性已被移除,而其他一些特性開(kāi)始顯示棄用警告。

錯(cuò)誤處理:改進(jìn)了Rollup 拋出的錯(cuò)誤信息的清晰度和一致性。

性能優(yōu)化:避免在發(fā)出數(shù)千個(gè)資產(chǎn)時(shí)的性能問(wèn)題。

就重大變更而言,這是一個(gè)小得多的主版本。目標(biāo)是為了最大化利用生態(tài),而推出的一個(gè)穩(wěn)定版。CI 確保與下游項(xiàng)目的兼容性,以便更改對(duì)最終用戶(hù)的影響盡可能小。

使用 SWC 支持的 React 插件 @vitejs/plugin-react-swc[17]

快速刷新(比 Babel 快約 20 倍)

啟用自動(dòng) JSX 運(yùn)行時(shí)(Babel 在 v7.9.0 版本中引入此特性,相關(guān)閱讀:Introducing the New JSX Transform[18] 和 A new JSX transform[19]

Vite 4.1 (2023.02)

同步 Rollup 和 esbuild 版本

react 插件變化顯著

plugin-react 修復(fù)了很多 HMR bug

支持 SWC 的 Vite 版本,添加了對(duì) SWC 插件的支持。

Vite 4.2 (2023.03)

改進(jìn)源代碼調(diào)試體驗(yàn)

修復(fù) Chrome 開(kāi)發(fā)工具在顯示相對(duì)路徑時(shí)的異常

通過(guò) x_google_ignoreList 從堆棧跟蹤中排除某些文件的源映射,做到錯(cuò)誤堆棧追蹤僅關(guān)注你在意的部分(相關(guān)閱讀:vite server.sourcemapIgnoreList[20] 和 The x_google_ignoreList source map extension[21])

Vite 4.3 (2023.04)

與 Vite 4.2 相比,4.3 帶來(lái)了全面的速度提升(Vite 4.3 is out![22])。

2199f370-6455-11ee-939d-92fbcf53809c.png

Vite 4.4 (2023.07)

實(shí)驗(yàn)性支持 Lightning CSS[23](基于 Rust 實(shí)現(xiàn)的 CSS 編譯工具鏈),注意:它目前與其他 CSS 處理器互斥。

create-vite[24] 添加 solid 和 qwik 模板。

21a93420-6455-11ee-939d-92fbcf53809c.png

Vite 5.0 (當(dāng)前處于 beta 版)

最低 Node.js 版本要求 18+

CommonJS API 已棄用。注意:并未對(duì)其進(jìn)行刪除,如果你仍在使用 Vite 中的通用 API,也不會(huì)有任何問(wèn)題。但會(huì)收到警告,督促你轉(zhuǎn)向 ESM API。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227230
  • CCS
    CCS
    +關(guān)注

    關(guān)注

    8

    文章

    178

    瀏覽量

    39626
  • SSR
    SSR
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

    17667
  • ESM
    ESM
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    9032
  • rust語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    2988

原文標(biāo)題:ViteConf 2023:Vite 即將 Rust 化

文章出處:【微信號(hào):Rust語(yǔ)言中文社區(qū),微信公眾號(hào):Rust語(yǔ)言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Rust語(yǔ)言如何與 InfluxDB 集成

    Rust 是一種系統(tǒng)級(jí)編程語(yǔ)言,具有高性能和內(nèi)存安全性。InfluxDB 是一個(gè)開(kāi)源的時(shí)間序列數(shù)據(jù)庫(kù),用于存儲(chǔ)、查詢(xún)和可視大規(guī)模數(shù)據(jù)集。Rust 語(yǔ)言可以與 InfluxDB 集成,提供高效
    的頭像 發(fā)表于 09-30 16:45 ?955次閱讀

    關(guān)于虛擬儀器測(cè)試環(huán)境VITE的分析

    VITE標(biāo)準(zhǔn)體系結(jié)構(gòu)分析VITE實(shí)現(xiàn)體系結(jié)構(gòu)VITE核心信息模型結(jié)構(gòu)
    發(fā)表于 05-12 06:31

    RUST在嵌入式開(kāi)發(fā)中的應(yīng)用是什么

    的文檔、有用的錯(cuò)誤消息、友好編譯器、一流的工具,只是Rust的幾個(gè)好處。它帶有一個(gè)集成的包管理器和構(gòu)建工具,支持自動(dòng)完成和類(lèi)型檢查的智能多編輯器,一個(gè)自動(dòng)格式程序,等等。為什么在嵌入式開(kāi)發(fā)中使用Rust?
    發(fā)表于 12-24 08:34

    Rust代碼中加載靜態(tài)庫(kù)時(shí),出現(xiàn)錯(cuò)誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    “ [i]malloc ”、“ [i]exit ”。我驗(yàn)證了使用 ` [i]nm ` 命令。 問(wèn)題是我打算使用 ffi 在 rust 中使用這個(gè)靜態(tài)庫(kù)。當(dāng)我嘗試在我的 Rust 代碼中加載靜態(tài)庫(kù)
    發(fā)表于 06-09 08:44

    精彩預(yù)告 | OpenHarmony即將亮相MTSC 2023

    MTSC 2023 第 12 屆中國(guó)互聯(lián)網(wǎng)測(cè)試開(kāi)發(fā)大會(huì)(深圳站)即將2023 年 11 月 25 日,在深圳登喜路國(guó)際大酒店舉辦,大會(huì)將以“1 個(gè)主會(huì)場(chǎng)+4 個(gè)平行分會(huì)場(chǎng)”的形式呈現(xiàn),聚集一眾
    發(fā)表于 11-22 10:28

    2023年獎(jiǎng)杯收到

    今天非常高興收到了論壇發(fā)送的2023年“年度優(yōu)秀版主”獎(jiǎng)杯,今年不知不覺(jué)間就將結(jié)束,期待即將到來(lái)的2024年。加油論壇,加油各位壇友!
    發(fā)表于 12-09 22:26

    Go Vite通用的去中心應(yīng)用平臺(tái)

    go-vite.zip
    發(fā)表于 04-22 10:59 ?1次下載
    Go <b class='flag-5'>Vite</b>通用的去中心<b class='flag-5'>化</b>應(yīng)用平臺(tái)

    GCC將加入對(duì)Rust的支持

    GCC Rust 的代碼仍然需要更仔細(xì)的審查。按照計(jì)劃,它有可能作為 GCC 13 的一部分而亮相,GCC 13 將于 2023 年 4 月左右發(fā)布穩(wěn)定版,其對(duì) Rust 語(yǔ)言的支持有希望達(dá)到 beta 級(jí)別。
    的頭像 發(fā)表于 12-13 10:04 ?980次閱讀

    Chromium正式開(kāi)始支持Rust

    泛地在Chromium中使用Rust還需要時(shí)間去評(píng)估。https://security.googleblog.com/2023/01
    的頭像 發(fā)表于 01-14 10:04 ?855次閱讀

    Go/Rust挑戰(zhàn)Java/Python地位

    增長(zhǎng)持續(xù)下去,其可能很快就會(huì)直接挑戰(zhàn) Java 和 Python 的地位。Go 是其中第三大最受歡迎的語(yǔ)言,其次是 C++、JavaScript、C#、C、Rust、TypeScript、R、Kotlin 和 Scala。
    的頭像 發(fā)表于 03-06 10:19 ?622次閱讀

    Rust流處理新秀,即將抗衡Flink霸主地位

    之前也有Rust嘗試做大數(shù)據(jù)套件,但是都沒(méi)有很成功的案例?;蛟SArroyo將是第一個(gè)用Rust編寫(xiě)的分布式流處理引擎成功的案例,這樣將再次證明Rust在大數(shù)據(jù)基建領(lǐng)域的可行性。
    的頭像 發(fā)表于 04-09 10:21 ?2862次閱讀

    Vite 4.3正式發(fā)布,前端構(gòu)建工具

    最新發(fā)布的 Vite 4.3 顯著提升了性能。發(fā)布公告寫(xiě)道,Vite 團(tuán)隊(duì)在這個(gè)版本中將工作重心放在提升開(kāi)發(fā)服務(wù)器的性能上,其中包括簡(jiǎn)化解析邏輯、改進(jìn)熱路徑、實(shí)現(xiàn)更智能的緩存以查找 package.json,TS 配置文件和解析的 URL。
    的頭像 發(fā)表于 04-26 14:23 ?912次閱讀
    <b class='flag-5'>Vite</b> 4.3正式發(fā)布,前端構(gòu)建工具

    GOTC 2023出品人吳迪:字節(jié)跳動(dòng)將持續(xù)投入Rust

    面、數(shù)據(jù)平臺(tái)、圖數(shù)據(jù)庫(kù)、WebAssembly 等。去年 9 月,字節(jié)跳動(dòng)還開(kāi)源了 RPC 框架 Volo 及相關(guān)生態(tài)。 在?GOTC 2023?臨近之際,字節(jié)跳動(dòng)服務(wù)框架 Rust 負(fù)責(zé)人
    的頭像 發(fā)表于 05-24 09:29 ?344次閱讀

    Rust的內(nèi)部工作原理

    Rust到匯編:了解 Rust 的內(nèi)部工作原理 非常好的Rust系列文章,通過(guò)生成的匯編代碼,讓你了解很多Rust內(nèi)部的工作機(jī)制。例如文章有 Rus
    的頭像 發(fā)表于 06-14 10:34 ?665次閱讀
    <b class='flag-5'>Rust</b>的內(nèi)部工作原理

    Vite 5正式發(fā)布,性能大幅提升

    公告指出,Vite 5 的重點(diǎn)是清理 API(刪除已棄用的功能),并精簡(jiǎn)了幾個(gè)功能以解決長(zhǎng)期存在的問(wèn)題。例如,將 define 轉(zhuǎn)換為使用正確的 AST 替換,而不是使用 regexes。項(xiàng)目團(tuán)隊(duì)表示,他們將繼續(xù)推進(jìn)實(shí)現(xiàn)面向未來(lái)的 Vite。
    的頭像 發(fā)表于 11-20 16:20 ?910次閱讀