JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的維護(hù)者和創(chuàng)作者們展望2024年,分享了他們計(jì)劃中的改進(jìn)。
譯自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine Lawson。
由于水晶球破裂,The New Stack 采訪了來自 Angular、Next.js、React 和 Solid 的創(chuàng)始人和維護(hù)者,詢問他們對(duì)2024年的規(guī)劃。以下概述了前端開發(fā)者可以期待的內(nèi)容。
Angular: 可選的 Zone.js
去年,Angular 的兩個(gè)重大成就是引入了細(xì)粒度的反應(yīng)性 Signals和可延遲的視圖,Google 的 Angular DevRel 技術(shù)負(fù)責(zé)人Minko Gechev說。下一年將在此基礎(chǔ)上繼續(xù)專注于細(xì)粒度的反應(yīng)性,并使 Zone.js 可選,他向 The New Stack 透露。
在 Angular 中,Zone 是跨異步任務(wù)持續(xù)存在的執(zhí)行上下文。Zones 在這個(gè) GitHub 倉(cāng)庫(kù)中有詳細(xì)解釋,但一個(gè) zone 有五個(gè)職責(zé),包括攔截異步任務(wù)調(diào)度和封裝回調(diào)進(jìn)行錯(cuò)誤處理和跨異步操作的區(qū)域跟蹤。Zone.js 可以創(chuàng)建跨異步操作持續(xù)存在的上下文,以及為異步操作提供生命周期鉤子。
“我們正在探索為現(xiàn)有項(xiàng)目啟用可選的 Zone.js,開發(fā)人員應(yīng)該能夠通過重構(gòu)現(xiàn)有應(yīng)用來利用這個(gè)功能,” Gechev 說,“使用可選的 Zone.js,我們預(yù)期加載時(shí)間和首次渲染會(huì)有改進(jìn)。在細(xì)粒度反應(yīng)性的工作將其提升到另一個(gè)水平,使我們能夠僅檢測(cè)組件模板的一部分中的更改?!?/p>
這些特性將導(dǎo)致運(yùn)行時(shí)更快,他說。
在另一項(xiàng)性能操作中,Angular正在考慮是否默認(rèn)啟用混合渲染。Gechev補(bǔ)充說,可以選擇不使用混合渲染,因?yàn)樗赡軙?huì)增加托管需求和成本。
“我們看到 SSG(靜態(tài)站點(diǎn)生成)和 SSR(服務(wù)器端渲染)的巨大價(jià)值,通過在v17 中奠定堅(jiān)實(shí)的基礎(chǔ),我們正在努力完成最后的拋光工作,以從一開始就啟用此體驗(yàn),” Gechev說。
他補(bǔ)充說,優(yōu)先事項(xiàng)之一是實(shí)現(xiàn)其Signals RFC。
開發(fā)者也可能會(huì)看到 Angular 文檔的改進(jìn)。根據(jù)開發(fā)者調(diào)查,開發(fā)者希望獲得升級(jí)的學(xué)習(xí)體驗(yàn),其中包括使 Angular.dev 成為該框架的新首頁(yè)。開發(fā)人員還將首次加載時(shí)間列為優(yōu)先事項(xiàng),混合渲染、局部 hydration 和可選的 Zone.js 應(yīng)該可以解決這一問題,他補(bǔ)充說,組件創(chuàng)作也是 Angular 計(jì)劃進(jìn)一步簡(jiǎn)化的事項(xiàng)。
“我們致力于迭代交付功能,并隨著時(shí)間的推移逐步增強(qiáng)它們”,Gechev說,“開發(fā)者將能夠在2024年受益于所有改進(jìn),并在未來幾年獲得更好的開發(fā)者體驗(yàn)和性能。”
Next.js: 正在開發(fā)新的編譯器
Next.js 在2023年引入了新應(yīng)用服務(wù)器,旨在支持React服務(wù)器組件(RSC)和Server Action。它繼續(xù)支持舊的應(yīng)用服務(wù)器,其路由系統(tǒng)可以互換,Vercel產(chǎn)品負(fù)責(zé)人Lee Robinson說,該公司監(jiān)督此框架。這種互操作性意味著開發(fā)人員可以慢慢地添加新特性。
“有些客戶已經(jīng)使用Next.js構(gòu)建了5-6年,他們對(duì)這些較新的特性的采用也需要多年時(shí)間”,Robinson說,“我們希望盡可能順利地讓人們參與這個(gè)過程。”
在新一年,Next.js希望解決許多問題,但一個(gè)優(yōu)先事項(xiàng)可能是簡(jiǎn)化緩存。就開發(fā)者體驗(yàn)而言,這可以更容易些,他說。
“通常,生態(tài)系統(tǒng)中的許多開發(fā)人員不得不引入大量額外的包或?qū)W習(xí)如何使用其他工具來進(jìn)行獲取、緩存和重新驗(yàn)證”,Robinson說,“Next.js現(xiàn)在已經(jīng)內(nèi)置了很多這些功能,這非常強(qiáng)大,但這也意味著需要學(xué)習(xí)的額外事項(xiàng),初步反饋是,'這很棒,非常強(qiáng)大,但如果能簡(jiǎn)單一些就更好了'?!?/p>
Next.js團(tuán)隊(duì)也將繼續(xù)關(guān)注性能改進(jìn),他稱這是“我們的持續(xù)投資”。
這很可能以明年的新編譯器的形式呈現(xiàn),該編譯器將加快在開發(fā)人員機(jī)器上啟動(dòng)Next.js的速度,他補(bǔ)充說。該編譯器已經(jīng)研發(fā)了大約一年,Vercel 一直在其產(chǎn)品和應(yīng)用內(nèi)部使用它。他說,這個(gè)由Rust提供動(dòng)力的編譯器即使不緩存也比之前的編譯器緩存時(shí)快。
“我們距離推出它非常近了,每個(gè)人都可以默認(rèn)啟用它,而且它比現(xiàn)有的 Webpack 編譯解決方案更快”,Robinson說,“開發(fā)人員希望他們的工具更快。如果它變得更快,他們永遠(yuǎn)不會(huì)抱怨。因此,有趣的是看到工具制造者,不是工具的用戶,而是實(shí)際的工具開發(fā)人員轉(zhuǎn)向諸如 Rust 之類的底層工具,以幫助獲得這最后一英里的性能提升?!?/p>
第三個(gè)目標(biāo)是繼續(xù)為未來 10 年的 Next.js 奠定基礎(chǔ)。
“這個(gè)新的路由系統(tǒng),你知道,我們顯然非常興奮。我們認(rèn)為這是未來的基礎(chǔ)”,他說,“但這也需要時(shí)間。人們會(huì)試用,他們會(huì)有功能請(qǐng)求,并希望看到事情發(fā)生改變。我們將其視為未來 5 至 10 年的非常長(zhǎng)期投資?!?/p>
他補(bǔ)充說,一個(gè)“某天”但可能不是今年的目標(biāo)是以更好的方式處理 Next.js 中的內(nèi)容。
“今天,它能夠正常運(yùn)行,你仍然可以連接到任何你想要的內(nèi)容源,但有可能簡(jiǎn)化開發(fā)者體驗(yàn)的方法,”他補(bǔ)充說?!斑@更像是一種可有可無的東西,而不是一項(xiàng)必需品,這就是為什么我認(rèn)為我們?cè)?024年不會(huì)著手處理它的原因,但我希望將來能夠?qū)ζ溥M(jìn)行一些處理?!?/p>
React:2024預(yù)覽
Meta的React工程經(jīng)理Eli White說,React團(tuán)隊(duì)希望在新一年看到更多框架采用React服務(wù)器組件。
“對(duì)于大多數(shù)人來說,RSC已成為他們對(duì)React范圍的看法的重大變化,從僅僅是一個(gè)UI層,到對(duì)您架構(gòu)應(yīng)用程序的方式有更多影響,以獲得最佳的用戶和開發(fā)人員體驗(yàn),特別是對(duì)于單頁(yè)應(yīng)用程序(SPA)不夠好的應(yīng)用程序”,White說。
雖然他沒有具體說明2024年的任何新發(fā)展,但White確實(shí)表示他們將發(fā)布和分享2023年一些啟示的更多進(jìn)展。例如,在React高級(jí)會(huì)議上,該團(tuán)隊(duì)向與會(huì)者展示了React Forget,這是React的自動(dòng)記憶編譯器。White說,React Forget將意味著開發(fā)人員不再需要使用useMemo和useCallback。
在React Native EU活動(dòng)上,White補(bǔ)充說:“我們分享了消息,即我們將在0.73版本開始將Web開發(fā)人員熟悉的Chrome開發(fā)工具引入React Native。我們還初步展示了我們對(duì)Static Hermes的研究成果,這是我們用于JavaScript的本地編譯器,它不僅有可能加速React Native應(yīng)用程序,而且從根本上改變了JavaScript的有效用途。”
Solid:專注于基本元素(Primitives)
Solid的創(chuàng)作者Ryan Carniato表示,Solid開發(fā)人員可以期待2024年推出的SolidStart 1.0和Solid.js 2.0。SolidStart是一個(gè)元框架,意味著它建立在Solid.js框架之上。他說,這與Svelte的SvelteKit相類似。
SolidStart的文檔這樣解釋:
“Web應(yīng)用程序通常由許多組件組成:數(shù)據(jù)庫(kù)、服務(wù)器、前端、打包工具、數(shù)據(jù)獲取/變異、緩存和基礎(chǔ)架構(gòu)。協(xié)調(diào)這些組件具有挑戰(zhàn)性,通常需要在應(yīng)用程序堆棧中共享大量狀態(tài)和冗余邏輯。這就是SolidStart的作用:提供一個(gè)在一個(gè)位置將所有這些部分組合在一起的平臺(tái)?!?/p>
由于SolidStart仍處于測(cè)試階段,Carniato有機(jī)會(huì)基本上使用生態(tài)系統(tǒng)中已有的東西來使其更好。
“其中一個(gè)重要的部分是,我們現(xiàn)在使用Nitro而不是編寫自己的部署適配器,Nitro還支持Nuxt框架,這使你能夠部署到所有不同的平臺(tái),” Carniato說。
另一個(gè)例子是任何Solid路由器都將在SolidStart中起作用。
“這意味著對(duì)路由器的基礎(chǔ)部分進(jìn)行了很多更新,以使它們可以共同工作,但我對(duì)最終結(jié)果感到非常滿意,因?yàn)槲覀冃F(tuán)隊(duì)的志愿者需要維護(hù)的代碼量要少得多,并且它為開發(fā)人員提供了很多靈活性和控制,“他說?!八麄儾槐黄炔捎脝我坏慕鉀Q方案,這對(duì)我來說非常重要,因?yàn)槊總€(gè)人都有自己的需求。正如我所說,如果構(gòu)建正確的組件并找出這些構(gòu)建塊是什么,人們可以做更多的事情?!?/p>
最終結(jié)果是一個(gè)“可互換”組件的元框架,不持有太多主觀意見,他說。Solid團(tuán)隊(duì)一直在思考在越來越多的元框架決定開發(fā)人員使用什么的世界中,正確的基本元素對(duì)影響的問題。
“對(duì)我來說,一直都是關(guān)于基本元素的構(gòu)建塊,非常注重工程,我認(rèn)為這也是它與眾不同的原因之一,”他說?!拔乙恢毕矚g給予選擇,并且我認(rèn)為如果你擁有正確的基本元素,正確的構(gòu)建塊,你就可以構(gòu)建出正確的解決方案?!?/p>
他表示,Solid 2.0預(yù)計(jì)將在2024年中晚期發(fā)布。目前,他們正在原型化它將如何處理異步系統(tǒng)。
“Solid 2.0也將是一個(gè)非常重要的發(fā)布版本,因?yàn)槲覀冋谥匦聦徱暦磻?yīng)系統(tǒng),并思考如何解決異步信號(hào)或異步系統(tǒng)的問題,” Carniato說。
他補(bǔ)充說,Solid試圖在控制和性能之間取得平衡。
“我們的社區(qū)中有很多熱情的人,非常關(guān)注性能的技術(shù)人員,關(guān)心控制的人,”他說?!拔覀兾嗽S多真正想要控制構(gòu)建的每個(gè)部分的人?!?/p>