如何選擇正確的Node框架:Next, Nuxt, Nest?

這三個(gè)框架都是服務(wù)器端渲染,它們分別與React、Vue和Angular(三個(gè)目前最流行的前端框架)密切相關(guān)

我們的比較將基于一下幾點(diǎn):

? GitHub Stars和npm下載

? 安裝

? 基本的Hello World應(yīng)用程序

? 好處

? 缺點(diǎn)

? 性能

? 社區(qū)活躍度

Next

Next是一個(gè)React框架,允許使用React構(gòu)建SSR和靜態(tài)web應(yīng)用

start

? GitHub Stars: +36,000

? npm weekly downloads: +300,000

? ? 安裝

next react react-dom是必不可少的

npm?install?--save?next?react?react-dom?

package.json 中添加腳本,如下所示:? ? ?

{??

?????????"scripts":?{??

???????????"dev":?"next",??

???????????"build":?"next?build",??

???????????"start":?"next?start"??

?????????}??

???????}?

next 將讀取page目錄下的js文件,并解析成頁(yè)面路由

?Hello World

項(xiàng)目?jī)?nèi)創(chuàng)建目錄文件 ./pages/index.js? ? ?

function?Home()?{??

return<div>Hello?world!</div>;??

????????}???

?????????export?default?Home;?????

?????????//?npm?run?dev??

????????//?然后訪(fǎng)問(wèn)?http://localhost:3000?

好處

? 默認(rèn)情況下,每個(gè)組件都是服務(wù)器渲染的

? 自動(dòng)代碼拆分,加快頁(yè)面加載速度

? 不加載不必要的代碼

? 簡(jiǎn)單的客戶(hù)端路由(基于頁(yè)面)

? 基于Webpack的開(kāi)發(fā)環(huán)境,支持模塊熱更新(HMR)

? 獲取數(shù)據(jù)非常簡(jiǎn)單

? 支持任何Node HTTP服務(wù)器實(shí)現(xiàn),如Express

? 支持Babel和Webpack自定義

? 能夠部署在任何能運(yùn)行node的平臺(tái)

? 內(nèi)置頁(yè)面搜索引擎優(yōu)化(SEO)處理

缺點(diǎn)

? Next不是后端服務(wù),應(yīng)該與后臺(tái)操作獨(dú)立開(kāi)

? 如果你只想創(chuàng)建一個(gè)簡(jiǎn)單的WEB應(yīng)用,那么它可能會(huì)是牛刀殺雞

? 數(shù)據(jù)會(huì)在客戶(hù)端和服務(wù)器重復(fù)加載

? 沒(méi)有實(shí)現(xiàn)前后分離的項(xiàng)目,遷移到Next是一件痛苦的事,可能需要雙倍工作

? ? 性能

性能基于一下兩點(diǎn)

? ? ? 1、使用Apache Bench測(cè)試吞吐量。

? ? ? 2、使用 lighthouse測(cè)試 Preformance、Accessibility、Best Practices、SEO


這是Next基本HelloWorld程序。每秒能處理550.87個(gè)請(qǐng)求。每個(gè)請(qǐng)求花費(fèi)的平均時(shí)間為18.153ms


ighthouse測(cè)試報(bào)告中可以看到Preformance、Accessibility、Best Practices、SEO都高于70,雖然比其他兩個(gè)框架低,但不得不說(shuō)已經(jīng)是一個(gè)比較好的數(shù)據(jù),Best Practices 得分nuxt則是高于其他倆個(gè)

社區(qū)活躍度

? 貢獻(xiàn)者數(shù)量:678

? Pull Requests: 3,029

? 社區(qū)相當(dāng)活躍

Nuxt

Nuxt是一個(gè)基于Vue的通用應(yīng)用框架,預(yù)設(shè)了利用Vue開(kāi)發(fā)服務(wù)端渲染的應(yīng)用所需要的各種配置,主要關(guān)注的是應(yīng)用的UI渲染

star

? GitHub stars:+19,000

? npm weekly downloads: +100,000

? ? 安裝

為了快速入門(mén),Nuxt.js團(tuán)隊(duì)創(chuàng)建了腳手架工具 create-nuxt-app? ? ?

//?確保安裝了npx(npx在NPM版本5.2.0默認(rèn)安裝了)??

npx?create-nuxt-app<項(xiàng)目名>?

它會(huì)讓你進(jìn)行一些選擇:在集成的服務(wù)器端框架如:Express、Koa、Hapi、Feathers、Micro、Adonis (WIP);選擇您喜歡的UI框架:Bootstrap、Vuetify、Bulma、Buefy等等

?Hello World

Nuxt依據(jù) pages 目錄結(jié)構(gòu)自動(dòng)生成 vue-router 模塊的路由配置? ? ?

//?./pages/index.vue??

<template>??

<div>??

<h1>Hello?world!</h1>??

<NLink?to="/about">??

??????????????About?Page??

</NLink>??

</div>??

</template>?

好處

? 它的主要范圍是UI渲染,同時(shí)抽象出客戶(hù)端/服務(wù)器分布

? 靜態(tài)渲染、前后分離

? 自動(dòng)代碼分層

? 服務(wù)、模板皆可配置

? 項(xiàng)目結(jié)構(gòu)清晰

? 組件與頁(yè)面無(wú)縫切換

? 默認(rèn)支持得ES6 / ES7

? 支持開(kāi)發(fā)熱更新

? 路由級(jí)別的異步數(shù)據(jù)獲取

? 支持靜態(tài)文件服務(wù)

? 樣式預(yù)處:Sass,Less,Stylus等

缺點(diǎn)

? 周邊資源較少

? 開(kāi)發(fā)復(fù)雜的組件可能會(huì)很麻煩

? 自定義配置顯得很麻煩

? 很多具有副作用的數(shù)據(jù)操作this.items[key]=value

? 高流量可能會(huì)給服務(wù)器帶來(lái)壓力

? 只能在某些掛鉤中查詢(xún)和操作DOM

? ? 性能

Nuxt中的基本HelloWorld應(yīng)用。每秒能處理190.05個(gè)請(qǐng)求。平均一個(gè)請(qǐng)求時(shí)間為52.619毫秒。在此度量標(biāo)準(zhǔn)上,Nuxt與其他兩個(gè)框架相比表現(xiàn)最差


?Lighthouse測(cè)試報(bào)告中Preformance、Accessibility、SEO三項(xiàng)中得分最高


社區(qū)活躍

? 貢獻(xiàn)者數(shù)量:191

? Pull Requests:1,385

Nest

Nest是一個(gè)漸進(jìn)式Node框架,深受Angular的啟發(fā)。用于構(gòu)建高效,可擴(kuò)展的Node.服務(wù)器端應(yīng)用程序的框架。使用TypeScript構(gòu)建,保留與純JS的兼容性,集OOP(面向?qū)ο缶幊蹋?FP(函數(shù)式編程),FRP(響應(yīng)式編程)一身。服務(wù)引擎蓋默認(rèn)使用Express但也提供與各種其他庫(kù)的兼容性,例如Fastify,允許輕松使用可用的無(wú)數(shù)第三方插件

? ? 安裝

nest提供cli使用該cli命令安裝Nest并創(chuàng)建新項(xiàng)目? ? ?

npm?i?@nestjs/cli??

???????nest?new?project-name?

或者,使用Git安裝TypeScript啟動(dòng)項(xiàng)目:? ?

git?clone?https://github.com/nestjs/typescript-starter.git?project??

??????cd?project??

??????npm?install??

??????npm?run?start?

? ? Hello World

使用該npm cli命令創(chuàng)建新項(xiàng)目后,src目錄下會(huì)出現(xiàn)幾個(gè)核心文件,main.ts是我們的入口? ? ?//?創(chuàng)建一個(gè)服務(wù)然后監(jiān)聽(tīng)3000端口??

???????import?{?NestFactory?}?from?'@nestjs/core';??

???????import?{?ApplicationModule?}?from?'./app.module';??????

????????async?function?bootstrap()?{??

constapp?=?await?NestFactory.create(ApplicationModule);??

?????????await?app.listen(3000);??

???????}??

???????bootstrap();???????

????????//?啟動(dòng)起來(lái)???

???????npm?start?

好處

? 作為基于TypeScript的Web框架,可以進(jìn)行嚴(yán)格的類(lèi)型定義

? 自動(dòng)生成Swagger文檔

? Nest中的文件夾結(jié)構(gòu)主要基于A(yíng)ngular

? 基于模塊的框架,代碼可復(fù)用

? 項(xiàng)目結(jié)構(gòu)清晰,只需要關(guān)注業(yè)務(wù)無(wú)需關(guān)注架構(gòu)

? 使用最新版本的TypeScript,意味著JS的型特性基本都可用

? 為開(kāi)發(fā)人員提供更少的上下文切換。從Angular代碼到Nest的過(guò)渡相對(duì)容易

? 與Angular類(lèi)似,Nest也有一個(gè)不錯(cuò)的命令行工具

缺點(diǎn)

? 缺乏文檔。該框架與其他框架有很好的集成,但文檔很少

? 背后沒(méi)有大型企業(yè)的支持力

? 總體而言,與其他框架相比,Nest的社區(qū)規(guī)模較小

? ? 性能

Nest中的基本HelloWorld應(yīng)用。每秒能處理928.18個(gè)請(qǐng)求。每個(gè)請(qǐng)求的平均時(shí)間為10.774毫秒。在此指標(biāo)上,Nest在我們比較的三個(gè)框架中表現(xiàn)最佳


Lighthouse提供的報(bào)告中,Nest具有非常高的性能,但是accessibility, best practices,SEO得分較低


Nest不是最流行的框架但值得一試!

社區(qū)參與

? 貢獻(xiàn)者數(shù)量:81

? Pull Requests:469

Next, Nuxt, Nest比較就到這里 Preformance、Accessibility、Best Practices、SEO選擇你最想要的那個(gè)吧

歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開(kāi)發(fā):855801563 獲取更多免費(fèi)視頻教程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容