掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
最近 React 發(fā)布了全新的文檔,文檔中已經(jīng)不再將 create-react-app (CRA) 作為搭建 React 應(yīng)用的推薦方式,而是推薦了很多其他方式,包括 Vite、Next.js、Remix、Gatsby 等,下面就分別看看這些方式都有哪些優(yōu)缺點(diǎn),2023年該如何做出選擇!

Vite 很顯然是 create-react-app (CRA) 的繼任者,因?yàn)樗c CRA 沒有太大的區(qū)別。與 create-react-app(使用 Webpack)相比,它要快得多,因?yàn)樗诘讓邮褂昧薳sbuild。
和 create-react-app (CRA) 一樣,Vite 也更傾向于使用客戶端路由和渲染來創(chuàng)建單頁面應(yīng)用(SPA)。然而,由于服務(wù)端渲染(SSR)越來越受到重視,因此在 Vite 中它作為一個(gè)可選功能提供。
如果已經(jīng)在使用 create-react-app(CRA),那么遷移到 Vite 是非常簡單的。Vite 的 vite.config.js 文件以及特定功能的文件(例如 tsconfig)只需進(jìn)行少量配置,就可以使用 TypeScript、ESLint 和 SSR 等可選功能了。
在 Vite 中允許開發(fā)者在沒有框架的情況下使用 React。開發(fā)者可以自由選擇用于路由、數(shù)據(jù)獲取、狀態(tài)管理和測試的 React 庫。與所有 React 框架相比,它不會強(qiáng)制要求在項(xiàng)目級別上使用任何特定的 React 功能、庫或配置。
Vite 鼓勵初學(xué)者在沒有框架的干擾下學(xué)習(xí) React 及其基礎(chǔ)知識。當(dāng)使用 Vite 時(shí),一個(gè)初學(xué)者可以專注于學(xué)習(xí) React 和它的核心特性,而不需要受到框架的限制。相比之下,在使用框架的環(huán)境中學(xué)習(xí) React 時(shí),React 幾乎處于被動狀態(tài),必須要遵循框架的意圖來進(jìn)行學(xué)習(xí)。
React + Vite 的優(yōu)勢:
React + Vite 的缺點(diǎn):
為什么 Vite 可能不會成為 React 文檔中的默認(rèn)工具:
Next.js 作為框架是最成熟的,因此當(dāng) React 開發(fā)人員想要在框架環(huán)境中使用 React 時(shí),這可能是最好的選擇。它包含許多內(nèi)置的功能(例如基于文件的路由)。如果 Next.js不適合你,可以看看去年開源的 Remix 框架;它與 Next.js 的不同之處在于它專注于 Web 標(biāo)準(zhǔn)。
Next.js 更注重服務(wù)端渲染(SSR)作為渲染技術(shù)。然而,它也可以與靜態(tài)網(wǎng)站生成(SSG)和客戶端渲染(CSR)一起使用。此外還有一些更渲染技術(shù)可用,如增量靜態(tài)再生(ISR)和 React 服務(wù)器組件(RSC)。另外,可以在 Next.js 應(yīng)用中混合使用這些渲染技術(shù)。例如,一個(gè)營銷頁面可以使用 SSG,而注冊/登錄功能使用 SSR。
然而,使用這么多強(qiáng)大的功能需要付出代價(jià):不同的渲染技術(shù)會增加工程開銷,框架不斷地開發(fā)新的渲染技術(shù),因此最終會改變其優(yōu)先順序,而且并不是所有開發(fā)者都能跟得上這個(gè)速度。盡管 Next.js 在過去沒有引入破壞性變化,做得非常好,但在推動 JavaScript/React 渲染到后端的前沿工作中,總會有新的標(biāo)準(zhǔn)/配置。
總之,雖然 React 本身(例如使用Vite)相對穩(wěn)定,但在 Next.js 生態(tài)系統(tǒng)中肯定會看到變化,因?yàn)樗菍?React 引入服務(wù)端領(lǐng)域的開路先鋒。
Next.js 的優(yōu)點(diǎn):
Next.js 的缺點(diǎn):
為什么 Next.js 可能是 React 文檔中的默認(rèn)選擇:
Astro 允許開發(fā)人員創(chuàng)建以內(nèi)容為中心的網(wǎng)站。由于其 island 架構(gòu)和選擇性水合作用,它默認(rèn)為每個(gè)網(wǎng)站提供了快速性能。因此 SEO 相關(guān)的網(wǎng)站可以從使用 Astro 中受益。
從實(shí)現(xiàn)的角度來看,Astro更傾向于多頁面應(yīng)用(MPA)的概念,而不是單頁面應(yīng)用(SPA)。Astro 是一個(gè)與框架(此處為 React)無關(guān)的解決方案。因此,可以使用 Astro 的內(nèi)置組件語法或選擇的框架(例如 React)。該框架僅用于服務(wù)端渲染,不會暴露給客戶端。只有當(dāng)決定為客戶端添加一個(gè)交互式 island 時(shí),它才會將所有必需的 JavaScript 代碼發(fā)送到瀏覽器。
在以內(nèi)容為中心的網(wǎng)站方面,Astro 被視為 Gatsby 的競爭對手。在過去的幾年里,Gatsby 在與 Next 的競爭中失敗了。在這場競爭中,可能過于關(guān)注與 Next 的功能平衡(例如 SSR),因此較少關(guān)注真正重要的開發(fā)者體驗(yàn)和以內(nèi)容為中心的網(wǎng)站的性能方面。這給了Astro一個(gè)機(jī)會成為可行的替代選擇。
總之,即使是 Next(具有SSR / SSG / ISR)或 Gatsby 也適用于面向內(nèi)容的網(wǎng)站,Astro 作為競爭對手雖然相對較新,但似乎更適合具有面向內(nèi)容的網(wǎng)站的更具體要求(性能,注重內(nèi)容生產(chǎn)(例如MDX))。
相比之下,支持使用 Next 的唯一事實(shí)是:它混合了渲染技術(shù),因此可以在同一個(gè)應(yīng)用中實(shí)現(xiàn)性能優(yōu)化的營銷頁面和隱藏在登錄后面的實(shí)際應(yīng)用。但根據(jù) Astro 的基準(zhǔn)測試結(jié)果,它的性能仍然較低(不考慮 RSC,因?yàn)檫€不穩(wěn)定),因此可以在現(xiàn)代 Monorepo 設(shè)置中混合使用 Next 和 Astro,以便同時(shí)擁有 Web 應(yīng)用和網(wǎng)站。
React + Astro 的優(yōu)點(diǎn):
React + Astro 的缺點(diǎn):
為什么它可能不是 React 文檔中的默認(rèn)設(shè)置:
除了上述方式之外,還有一些其他創(chuàng)建 React 應(yīng)用的方式:
使用 React 之外的其他庫來啟動 SSR 項(xiàng)目:
參考:https://www.robinwieruch.de/react-starter/。
[1]Parcel: https://parceljs.org/?。
[2]create-t3-app: https://create.t3.gg/?。
[3]React Native: https://reactnative.dev/?。
[4]Expo: https://expo.dev/?。
[5]Tauri: https://tauri.app/?。
[6]Electron: https://www.electronjs.org/?。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流