<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          取代 Vue 和 React?25 年碼齡程序員不滿 Web 現(xiàn)狀創(chuàng)建新框架 Nue JS...

          共 7030字,需瀏覽 15分鐘

           ·

          2023-10-02 11:25

          轉(zhuǎn)自:InfoQ (ID:infoqchina)

          是重復(fù)造輪子,還是顛覆式創(chuàng)新?

          近日,前端開發(fā)者 Tero Piirajinen 推出了一個名為 Nue.js 的極簡化前端開發(fā)工具,并迅速引發(fā)社區(qū)討論。Piirajinen 在 Hacker News 上表示,它是 React、Vue、Next.js、Vite、Svelte 和 Astro 的替代品。

          1fa85b7aed72ae47fded71bd9d0d1507.webp

          據(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 項目,并積極尋求更多貢獻(xiàn)者的加入。

          Piirajinen 在 Hacker News 上的帖子中提到,過去 12 個月以來,他一直從事項目開發(fā)工作,最近還轉(zhuǎn)為全職。他的開發(fā)目標(biāo)有兩個:

          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ā)展目標(biāo)。

          Piirajinen 計劃在 2024 年 3 月之前完成所有工具的準(zhǔn)備工作,但具體時間取決于問題數(shù)量、開源維護工作量,以及他自己的判斷水平。目前,Nue 已在 GitHub 上開源,并遵循 MIT 許可證。

          GitHub 鏈接:
          https://github.com/nuejs/nuejs

          1 為什么創(chuàng)建 Nue?

          Piirajinen 表示,他創(chuàng)建 Nue 的主要原因是他對于當(dāng)前 Web 開發(fā)態(tài)勢并不滿意,主要問題包括相關(guān)工具太復(fù)雜、代碼難以理解、編譯時間長、網(wǎng)站過于臃腫等等。

          此前,Piirajinen 在 Flowplayer、Muut 和 Volument 擔(dān)任首席產(chǎn)品官(CPO)時,就有一些不太愉快的前端開發(fā)經(jīng)歷。雖然項目最初進展順利,但很快就變得難以維護。經(jīng)過幾個月的開發(fā),工作節(jié)奏開始明顯放緩,原本樂觀的未來計劃也越來越難以落地。

          Piirajinen 認(rèn)為,不只是他自己有這種感覺,整個前端開發(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)恢復(fù) Web 標(biāo)準(zhǔn)模型的榮光,并引入現(xiàn)代創(chuàng)新的力量。Nue 想要讓 Web 開發(fā)再次變得有趣。

          Piirainen 表示,Nue 的靈感主要來自 Jarred Sumner 開發(fā)的 Bun。這是一款新的 JS 運行時、捆綁器、測試運行器外加 NPM 兼容型包管理器。Piirainen 認(rèn)為,Bun 希望讓 JavaScript 變得更快,而 Nue 希望讓前端開發(fā)變得更快。Nue+Bun 將成為面向前端開發(fā)者的完美組合。值得一提的是,Jarred Sumner 和 Piirainen 一樣,也是一個單兵作戰(zhàn)的開發(fā)者。

          Nue 的其他靈感來源還包括:

          Salvatore Sanfilippo 的推文:“縱觀如今的 Web,我發(fā)現(xiàn)開發(fā)實踐仍然沒能遵循最基本的導(dǎo)航和可用性規(guī)則。盡管硬件發(fā)展一刻不停,但 Web 呈現(xiàn)速度仍然很慢。我只能認(rèn)為,現(xiàn)代前端開發(fā)已經(jīng)走進了死胡同?!?
          喬布斯的名言:“一切應(yīng)該以客戶體驗為起點,再據(jù)此倒推技術(shù)實現(xiàn)?!?
          Dieter Rams 的名言:“少,即是多?!?

          基于以上幾點,Piirainen 給 Nue 項目定下了三條指導(dǎo)原則:

          1. 關(guān)注點分離:讓人們各自專注自己的專業(yè)領(lǐng)域,由此加快交付速度;內(nèi)容創(chuàng)作者專注于內(nèi)容,UX 開發(fā)者專注于交互設(shè)計,JS 開發(fā)者負(fù)責(zé)前端中的后端部分。 

          2. “只用最普通的 Web 元素”:Nue 將努力發(fā)掘標(biāo)準(zhǔn) HTML、CSS 和 JavaScript 當(dāng)中蘊藏的力量。

          3. 極簡主義:小型代碼庫更易于維護和擴展,發(fā)生錯誤的幾率也會更低。

          2 代碼量減少 10 倍,Nue 主張極簡主義

          據(jù)了解,Nue 的最大優(yōu)勢就是幫助開發(fā)者以更少的代碼達(dá)成相同的效果。在一個項目中,同樣的功能實現(xiàn)之間存在 2 到 10 倍的代碼量差異并不罕見。以用 Nue 編寫的自定義列表框組件為例:React 版本需要使用 2500 行 JS 代碼,Nue 版本則能夠在保持 50% 到 80% 功能的前提下,把代碼量控制在十分之一。

          “這就是 HTML”

          Nue 使用的是基于 HTML 的模板語法:

                  
                    <div @name="media-object" class="{ type }">
                  
                  
                      <img src="{ img }">
                  
                  
                      <aside>
                  
                  
                        <h3>{ title }</h3>
                  
                  
                        <p :if="desc">{ desc }</p>
                  
                  
                        <slot/>
                  
                  
                      </aside>
                  
                  
                    </div>
                  
                

          類似于 React 宣稱其“就是 JavaScript”,Nue 也可被認(rèn)為“就是 HTML”。而這樣的特性,對于專注于交互設(shè)計、可訪問性和用戶體驗的 UX 開發(fā)者來說堪稱完美。

          開發(fā)者可以點擊此處(https://nuejs.org/compare/component.html)查看 Nue 編碼風(fēng)格與 React、Vue、Svelte、Tailwind 和 Astro 之間的異同。

          為擴展而生

          據(jù)介紹,Nue 之所以能夠為前端開發(fā)帶來新的可擴展水平,主要歸功于以下三大因素:

          1. 關(guān)注點分離,易于閱讀的代碼比“一團亂麻”的代碼更易于擴展。

          2. 極簡主義,100 行代碼肯定比 1000 行代碼更易于擴展。

          3. 人員分離。保證 UX 開發(fā)者只須關(guān)注前端,JS/TS 開發(fā)者只須關(guān)注前端的后端,這樣團隊技能就會達(dá)到最佳平衡。

          edad2ff9f27f7f1398fa289244216ef4.webp

          UX 開發(fā)者與 JavaScript 開發(fā)者能夠并行工作、互不干擾,最佳結(jié)果也自然會由此產(chǎn)生。

          對樣式解耦

          Nue 并不主張使用域 CSS、Tailwind 或者其他緊密耦合的 CSS-in-JS 框架。相反,它認(rèn)為最好將樣式跟布局和結(jié)構(gòu)區(qū)分開來,主要是因為:

          • 有助于增加可復(fù)用代碼:因為樣式不會被硬編碼進組件,所以同一組件可以根本頁面或上下文而呈現(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 友好的組件,例如視頻標(biāo)簽或圖片庫。

          • 通用組件:既可使用在服務(wù)器端,又可使用在客戶端,且效果相同。

          UI 庫文件

          Nue 允許大家在單個文件上定義多個組件,這無疑是種能把相關(guān)組件整理起來并簡化依賴項管理的絕佳方法。

                  
                    <!-- shared variables and methods -->
                  
                  
                    <script>
                  
                  
                      import { someMethod } from './util.js'
                  
                  
                    </script>
                  
                  
                    
                      
          <!-- first component --> <article @name="todo"> ... </article>
          <!-- second component --> <div @name="todo-item"> ... </div>
          <!-- third component --> <time @name="cute-date"> ... </time>

          使用庫文件能讓我們的文件系統(tǒng)結(jié)構(gòu)看起來更加整潔,用于粘合不同部分的樣板代碼也會更少,更有助于把各種庫打包起來以供其他開發(fā)者使用。

          工具組合更簡單

          Nue JS 提供用于服務(wù)器端渲染的簡單 render 函數(shù)和用于為瀏覽器生成組件的 compile 函數(shù)。而且無需像 Webpack 或 Vite 那類大型捆綁器那樣控制你的開發(fā)環(huán)境,可以直接將 Nue 導(dǎo)入到項目當(dāng)中。

          當(dāng)然,如果開發(fā)者需要打理幾百上千個 NPM 依賴項,那么在業(yè)務(wù)模型層上使用捆綁器確實有其現(xiàn)實意義。Bun 和 esbuild 都是性能出色的理想方案選項。

          相關(guān)用例

          Nue JS 是一款多功能工具,支持服務(wù)器端與客戶端渲染,可幫助開發(fā)者構(gòu)建起以內(nèi)容為中心的網(wǎng)站和響應(yīng)式單頁應(yīng)用程序。

          1. UI 庫開發(fā):能夠為響應(yīng)式前端或服務(wù)器生成的內(nèi)容創(chuàng)建可復(fù)用組件。

          2. 漸進式增強 Nue JS:這是一套堪稱完美的微型庫,可通過動態(tài)組件或“島”增強以內(nèi)容為中心的網(wǎng)站。

          3. 靜態(tài)網(wǎng)站生成器:只需將其導(dǎo)入項目即可準(zhǔn)備渲染,無需借助捆綁器。

          4. 單頁應(yīng)用程序:可配合即將推出的 Nue MVC 構(gòu)建起更簡單、更具可擴展性的應(yīng)用程序。T

          5. emplating Nue:一款用于生成網(wǎng)站和 HTML 電子郵件的通用工具。

          3 開發(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)了正確的問題,也擺出了嚴(yán)謹(jǐn)?shù)膽B(tài)度。支持!

          也有不少網(wǎng)友直接指出 Nue 當(dāng)前存在的問題,并給出了比較中肯的建議。

          網(wǎng)友 niutech 指出,Nue 更像是 Petite-Vue 或者 Riot.js 的替代品,還很難說可以取代非常成熟的 Vue 或者 React。所以拿它跟 headlessui-react/vue 做比較,就像拿蘋果跟橙子或者香蕉比較一樣有點錯位:無頭 UI 列表框的復(fù)雜度要高得多。其實在 Vue 中也可以用 Nue 那個級別的代碼量構(gòu)建起列表框,這事并不太難。

          此外,作者并沒有在入門介紹 (https://nuejs.org/docs/nuejs/getting-started.html) 中提到如何在無需構(gòu)建步驟的情況下使用 Nue,從而逐步增強現(xiàn)有 HTML 網(wǎng)站(例如 Petite Vue):<script src="http://unpkg.com/petite-vue" defer init></script>`還是Alpine.js:`<scriptsrc="http://unpkg.com/alpinejs" defer></script>`。

          用戶 bartq 認(rèn)為,單從網(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)當(dāng)中,光靠枯燥的說明文檔已經(jīng)很難吸引到支持者。比如想在視頻中看到:
              - 工具如何起效;    調(diào)試如何起效;    構(gòu)建過程如何起效;    還有其他哪些強大功能等。

          參考鏈接

          https://nuejs.org/

          https://nuejs.org/compare/component.html

          https://news.ycombinator.com/item?id=37507419

          https://thenewstack.io/dev-news-a-nue-frontend-dev-tool-panda-and-bun-updates/

          推薦閱讀  點擊標(biāo)題可跳轉(zhuǎn)

          1、7 個殺手級的 JS 一行代碼

          2、一步步從 CSS Modules 切換到 Tailwind CSS

          3、深入講解 VsCode 各場景高級調(diào)試與使用技巧

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产做受 高潮豆麻 | 国产黄色三级片 | 久草小视频 | 最新中文字幕久久 | 高潮毛片又色又爽免费 |