最新資訊取代 Vue 和 React?25 年碼齡程序員不滿 Web 開發(fā)現(xiàn)狀創(chuàng)建新框架 Nue JS,能減少 90% 代碼量!
發(fā)布時間:2023-09-28 11:08:24
近日,前端開發(fā)者 Tero Piirajinen 推出了一個名為 Nue.js 的極簡化前端開發(fā)工具,并迅速引發(fā)社區(qū)討論。Piirajinen 在 Hacker News 上表示,它是 React、Vue、Next.js、Vite、Svelte 和 Astro 的替代品。
據(jù)悉,Nue 源自德語單詞 neue,與英語中的“new”同義。它能幫助具備 HTML、CSS 和 JavaScript 知識的開發(fā)者構(gòu)建服務(wù)器端組件與響應(yīng)式界面。具體來說,Nue 有三大優(yōu)勢:改善開發(fā)者體驗;加快項目進度;加快頁面加載速度。而其最大的亮點在于,它能將用戶界面代碼量控制在其他同類方案的十分之一。
Nue 作者 Piirainen 是一位來自赫爾辛基的前端開發(fā)者,并在開源項目、技術(shù)產(chǎn)品和初創(chuàng)企業(yè)中工作了 25 年以上,比較知名的成果包括 Riot.js、Flowplayer 和 jQuery 等。目前,Piirainen 正在獨力開發(fā) Nue.js 項目,并積極尋求更多貢獻者的加入。
Piirajinen 在 Hacker News 上的帖子中提到,過去 12 個月以來,他一直從事項目開發(fā)工作,最近還轉(zhuǎn)為全職。他的開發(fā)目標有兩個:
1.Nue JS——一個用于構(gòu)建用戶界面的小型(壓縮后僅為 2.3 kb)JavaScript 庫。它類似于 React 和 Vue,但去掉了 hooks、effects、props、portals、watchers、injects、suspensions 等各種抽象元素。只要開發(fā)者具備 HTML、CSS 和 JavaScript 方面的基礎(chǔ)知識,就完全可以輕松上手。它支持服務(wù)器端渲染和客戶端響應(yīng)式組件,設(shè)計靈感來自 Vue 2.0 和 Riot.js(Piirainen 本人也是 Riot 的原作者)。
2.Nue 工具——一套完整的前端開發(fā)工具集。在完成之后,Nue 將能夠取代 Vite、Next.js 和 Astro 等系統(tǒng),這也是本項目的最終發(fā)展目標。
Piirajinen 計劃在 2024 年 3 月之前完成所有工具的準備工作,但具體時間取決于問題數(shù)量、開源維護工作量,以及他自己的判斷水平。目前,Nue 已在 GitHub 上開源,并遵循 MIT 許可證。
為什么創(chuàng)建 Nue?
Piirajinen 表示,他創(chuàng)建 Nue 的主要原因是他對于當前 Web 開發(fā)態(tài)勢并不滿意,主要問題包括相關(guān)工具太復雜、代碼難以理解、編譯時間長、網(wǎng)站過于臃腫等等。
此前,Piirajinen 在 Flowplayer、Muut 和 Volument 擔任首席產(chǎn)品官(CPO)時,就有一些不太愉快的前端開發(fā)經(jīng)歷。雖然項目最初進展順利,但很快就變得難以維護。經(jīng)過幾個月的開發(fā),工作節(jié)奏開始明顯放緩,原本樂觀的未來計劃也越來越難以落地。
Piirajinen 認為,不只是他自己有這種感覺,整個前端開發(fā)行業(yè)都面臨危機。Piirajinen 提到,他讀過不少相關(guān)文章,開發(fā)者們紛紛表示前端令他們身心俱疲。因此,Piirajinen 想要做點什么,改變這令人惱火的現(xiàn)實。
Piirajinen 計劃以極簡化方式從零開始構(gòu)建一切,并用到了不少“舊有”創(chuàng)新成果,例如漸進式增強、關(guān)注點分離和語義網(wǎng)頁設(shè)計。而 Nue 是 Piirajinen 改變現(xiàn)狀的一次雄心勃勃的嘗試,希望能為 JS 和 UX 開發(fā)者們提供極簡化工具。它強調(diào)恢復 Web 標準模型的榮光,并引入現(xiàn)代創(chuàng)新的力量。Nue 想要讓 Web 開發(fā)再次變得有趣。
Piirainen 表示,Nue 的靈感主要來自 Jarred Sumner 開發(fā)的 Bun。這是一款新的 JS 運行時、捆綁器、測試運行器外加 NPM 兼容型包管理器。Piirainen 認為,Bun 希望讓 JavaScript 變得更快,而 Nue 希望讓前端開發(fā)變得更快。Nue+Bun 將成為面向前端開發(fā)者的完美組合。值得一提的是,Jarred Sumner 和 Piirainen 一樣,也是一個單兵作戰(zhàn)的開發(fā)者。
Nue 的其他靈感來源還包括:
Salvatore Sanfilippo 的推文:“縱觀如今的 Web,我發(fā)現(xiàn)開發(fā)實踐仍然沒能遵循最基本的導航和可用性規(guī)則。盡管硬件發(fā)展一刻不停,但 Web 呈現(xiàn)速度仍然很慢。我只能認為,現(xiàn)代前端開發(fā)已經(jīng)走進了死胡同?!?/p>
喬布斯的名言:“一切應(yīng)該以客戶體驗為起點,再據(jù)此倒推技術(shù)實現(xiàn)?!?/p>
Dieter Rams 的名言:“少,即是多。”
基于以上幾點,Piirainen 給 Nue 項目定下了三條指導原則:
關(guān)注點分離:讓人們各自專注自己的專業(yè)領(lǐng)域,由此加快交付速度;內(nèi)容創(chuàng)作者專注于內(nèi)容,UX 開發(fā)者專注于交互設(shè)計,JS 開發(fā)者負責前端中的后端部分。
“只用最普通的 Web 元素”:Nue 將努力發(fā)掘標準 HTML、CSS 和 JavaScript 當中蘊藏的力量。
極簡主義:小型代碼庫更易于維護和擴展,發(fā)生錯誤的幾率也會更低。
代碼量減少 90%,Nue 主張極簡主義
據(jù)了解,Nue 的最大優(yōu)勢就是幫助開發(fā)者以更少的代碼達成相同的效果。在一個項目中,同樣的功能實現(xiàn)之間存在 2 到 10 倍的代碼量差異并不罕見。以用 Nue 編寫的自定義列表框組件為例:React 版本需要使用 2500 行 JS 代碼,Nue 版本則能夠在保持 50% 到 80% 功能的前提下,把代碼量控制在十分之一。
“這就是 HTML”
Nue 使用的是基于 HTML 的模板語法:
類似于 React 宣稱其“就是 JavaScript”,Nue 也可被認為“就是 HTML”。而這樣的特性,對于專注于交互設(shè)計、可訪問性和用戶體驗的 UX 開發(fā)者來說堪稱完美。
為擴展而生
據(jù)介紹,Nue 之所以能夠為前端開發(fā)帶來新的可擴展水平,主要歸功于以下三大因素:
關(guān)注點分離,易于閱讀的代碼比“一團亂麻”的代碼更易于擴展。
極簡主義,100 行代碼肯定比 1000 行代碼更易于擴展。
人員分離。保證 UX 開發(fā)者只須關(guān)注前端,JS/TS 開發(fā)者只須關(guān)注前端的后端,這樣團隊技能就會達到最佳平衡。
UX 開發(fā)者與 JavaScript 開發(fā)者能夠并行工作、互不干擾,最佳結(jié)果也自然會由此產(chǎn)生。
對樣式解耦
Nue 并不主張使用域 CSS、Tailwind 或者其他緊密耦合的 CSS-in-JS 框架。相反,它認為最好將樣式跟布局和結(jié)構(gòu)區(qū)分開來,主要是因為:
有助于增加可復用代碼:因為樣式不會被硬編碼進組件,所以同一組件可以根本頁面或上下文而呈現(xiàn)出不同效果。
不會弄亂代碼:純 HTML 或純 CSS 代碼,其理解難度顯然大大低于亂七八糟的組合代碼。
更快的頁面加載速度:通過對樣式解耦,開發(fā)者可以輕松從次 CSS 中提取主 CSS,并將 HTML 頁面保持在關(guān)鍵的 14 kb 限制以內(nèi)。
四種組件類型
Nue 擁有豐富的組件模型,允許開發(fā)者使用不同類型的組件構(gòu)建起各類應(yīng)用:
服務(wù)器組件:在服務(wù)器端渲染,可以幫助我們構(gòu)建起以內(nèi)容為中心的網(wǎng)站,無需 JavaScript 即可提升加載速度,并可接受搜索引擎的抓取。
響應(yīng)式組件:在客戶端渲染,可幫助開發(fā)者構(gòu)建動態(tài)島或單頁應(yīng)用程序。
混合組件:一部分在服務(wù)器端渲染、一部分在客戶端渲染。這類組件能幫助開發(fā)者構(gòu)建響應(yīng)式、SEO 友好的組件,例如視頻標簽或圖片庫。
通用組件:既可使用在服務(wù)器端,又可使用在客戶端,且效果相同。
開發(fā)者:Nue 很棒,但取代 Vue 或 React 還為時尚早
對于這樣一個創(chuàng)新項目,不少社區(qū)網(wǎng)友給予肯定。網(wǎng)友 aziis98 大贊 Nue 是一個“很棒的項目”,即使是像他這樣一個 Vite 和 Astro 的忠實粉絲,也感到“耳目一新”。
網(wǎng)友 ilrwbwrkhv 評論稱:
真的很棒。盡管 Web 一直在不斷變化,但層出不窮的“新框架”還是無法讓人們滿意,而且全部主流框架也都驚人地相似。
我們確實有必要從頭開始考量需求,并拿出一套更小、內(nèi)存效率更高的解決方案。
這里也希望有更多的前端開發(fā)者停止人云亦云,嘗試獨立思考,想想過去的老前輩是怎么努力減少內(nèi)存占用量的。
我每次看到如今的 Slack 等應(yīng)用程序,都有種悲傷和絕望的感覺。
像 Nue 這樣的項目至少發(fā)現(xiàn)了正確的問題,也擺出了嚴謹?shù)膽B(tài)度。支持!
也有不少網(wǎng)友直接指出 Nue 當前存在的問題,并給出了比較中肯的建議。
網(wǎng)友 niutech 指出,Nue 更像是 Petite-Vue 或者 Riot.js 的替代品,還很難說可以取代非常成熟的 Vue 或者 React。所以拿它跟 headlessui-react/vue 做比較,就像拿蘋果跟橙子或者香蕉比較一樣有點錯位:無頭 UI 列表框的復雜度要高得多。其實在 Vue 中也可以用 Nue 那個級別的代碼量構(gòu)建起列表框,這事并不太難。
此外,作者并沒有在入門介紹(https://nuejs.org/docs/nuejs/getting-started.html)中提到如何在無需構(gòu)建步驟的情況下使用 Nue,從而逐步增強現(xiàn)有 HTML 網(wǎng)站(例如 Petite Vue):<script src="//unpkg.com/petite-vue" defer init></script>`還是 Alpine.js: `<script src="//unpkg.com/alpinejs" defer></script>`。
用戶 bartq 認為,單從網(wǎng)站構(gòu)建庫的角度來看,Nue 已經(jīng)做得很成功了,但身為開發(fā)者,他還期待看到其他成果:
1. 用該庫創(chuàng)建的示例項目,包括過程中的挑戰(zhàn)、解決方案、難題和成果。
2. 用視頻演示如何用 Nue 庫創(chuàng)建簡單的應(yīng)用程序。在已經(jīng)非常擁擠的 JS 生態(tài)系統(tǒng)當中,光靠枯燥的說明文檔已經(jīng)很難吸引到支持者。比如想在視頻中看到:
- 工具如何起效;
- 調(diào)試如何起效;
- 構(gòu)建過程如何起效;
- 還有其他哪些強大功能等。