nodejs關于后端服務開發的探究

前提

在當前的環境中關于web server的主流開發基本上都是java、php之類的,其中java spring系列基本上占了大頭,而python之流也在奮起直追,但別忘了nodejs也是可以做這個服務的,只是位置有點尷尬,現在就來探究下nodejs做web server的當前現狀。

nodejs簡介

  • Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型。
  • Node.js底層用C++實現的,大部分模塊都使用JavaScript編寫,含大量的內置模塊,使得程序可以脫離Apache、Nginx、IIS等web服務器,作為獨立的服務器運行;

nodejs優勢

  • 高效:Node.js使用事件驅動和非阻塞I/O模型,使其在處理大量并發連接時表現出色。
  • 輕量:Node.js的內存占用小,適合處理大量短小的請求。
  • 靈活:Node.js可以使用JavaScript進行全棧開發,前端和后端可以使用同一種語言。
  • 社區活躍:Node.js有著龐大的社區和豐富的第三方庫。
node.js 和 其他語言(java,python等)比較

nodejs 是單線程,其他語言為多線程,由于設計的底層架構不一樣,這也就導致nodejs在大并發處理上看似有著天生的弱勢。但nodejs引入了非阻塞 I/O 操作、事件循環、異步編程、線程池、集群模塊等多方面的設計,進一步拉近了與其他語言的距離,至少在大中型項目中的表現不會比java等項目差,若是大并發,也可以通過負債均衡,分發,主從數據庫等運維方面相關緩解,亦可以通過引入部分其他語言來處理一部分業務,畢竟現在前后端分離,無需考慮接口從哪來,再加上微服務架構的出現,跨語言的開發、聯合、與分離也是一件很方便快捷的事情了,因此無需擔憂nodejs的使用問題。(騰訊,阿里這種大公司都同樣在使用呢!)
而使用nodejs的好處則是,項目開發簡單快速,功能迭代將更加迅捷,前后端統一語言開發效率將大大提升。

nodejs框架比較

Express、koa等框架時代

Express、koa等框架的出現讓js開發后端變得更加的快捷與簡單,兩者的出現亦讓nodejs后端的開發提升了一個檔次。因此也出現了大量相關開發示例與項目。但這個時代項目都存在一個問題,那就是項目通常較小。亦或者越開發越覺得項目難以管理

Midway、nestjs等框架時代

這兩種類型的框架,在express/koa等基礎之上引入了新的知識與概念,也因此讓nodejs框架開發后端越發趨于完善

Nest (NestJS) 是一個用于構建高效、可擴展的 Node.js 服務器端應用的框架。它使用漸進式 JavaScript,構建并完全支持 TypeScript(但仍然允許開發者使用純 JavaScript 進行編碼)并結合了 OOP(面向對象編程)、FP(函數式編程)和 FRP(函數式反應式編程)的元素。

Midway 基于 TypeScript 開發,結合了面向對象(OOP + Class + IoC)與函數式(FP + Function + Hooks)兩種編程范式,并在此之上支持了 Web / 全棧 / 微服務 / RPC / Socket / Serverless 等多種場景,致力于為用戶提供簡單、易用、可靠的 Node.js 服務端研發體驗。

引入typescript讓js的弱類型逐漸變成偏強類型語言,使其在大型項目管理與合作開發上越發的成為了可能,引入新的開發方式與規范,讓nodejs后端的開發形成了一個新的可能性。類似java spring的誕生,使得nodejs終于走出了重要的一步

nodejs的使用

若你的項目比較中小型,需要快速迭代,若你的項目沒有多大的人手,若你的項目需要想要使用非阻塞 I/O 操作、異步編程等。亦或者是中大型項目的部分業務改造,其實都可以選擇nodejs來開發后端了。畢竟中小項目無需擔心nodejs出問題,大型項目也抗的住,而超大型,巨型的項目到時候想要切換語言還會缺這點人,怕這點事嗎?
nestjs學習: https://nest.nodejs.cn/
midway官網: https://www.midwayjs.org/docs

個人更喜歡nestjs,不為別的就那編寫方式與springboot類型的風格就讓我喜歡。同時也更容易切換成java

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71623.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu20.04本地配置IsaacGym Preview 4的G1訓練環境(一)

Ubuntu20.04本地配置IsaacGym Preview 4的G1訓練環境 配置conda虛擬環境安裝pytorch、cuda和cudnn安裝IsaacGym Preview 4配置rsl_rl配置unitree_rl_gym配置unitree_sdk2py 寫在前面,要求完成anaconda配置,若沒完成,請參考本人其余博客&#…

RangeError: Maximum call stack size exceeded

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

八卡5090服務器首發亮相!

AI 人工智能領域熱度居高不下。OpenAI 的 GPT - 4 憑強悍語言處理能力,在內容創作、智能客服等領域廣泛應用。清華大學團隊的 DeepSeek 大模型在深度學習訓練優勢突出,正促使各行業應用端算力需求向推理主導轉變,呈爆發式增長 。 隨著 DeepS…

計算機視覺|Swin Transformer:視覺 Transformer 的新方向

一、引言 在計算機視覺領域的發展歷程中,卷積神經網絡(CNN) 長期占據主導地位。從早期的 LeNet 到后來的 AlexNet、VGGNet、ResNet 等,CNN 在圖像分類、目標檢測、語義分割等任務中取得了顯著成果。然而,CNN 在捕捉全…

【Leetcode 每日一題】2597. 美麗子集的數目

問題背景 給你一個由正整數組成的數組 n u m s nums nums 和一個 正 整數 k k k。 如果 n u m s nums nums 的子集中,任意兩個整數的絕對差均不等于 k k k,則認為該子數組是一個 美麗 子集。 返回數組 n u m s nums nums 中 非空 且 美麗 的子集數…

常見Web應用源碼泄露問題

文章目錄 前言一、常見的源碼泄露漏洞git源碼泄露SVN源碼泄露DS_Store文件泄漏網站備份壓縮文件泄露WEB-INF/web.xml泄露CVS泄露.hg源碼泄露Bazaar/bzr泄露.swp文件泄露 前言 在Web應用方面對于安全來說,可能大家對SQL注入、XSS跨站腳本攻擊、文件上傳等一些漏洞已…

記錄一次wifi版有人物聯串口服務器調試經過

1、首先買了一個華為的wifi路由器,連接上以后,設置好網絡名字和wifi密碼 2、用網線連接串口服務器,通過192.168.1.1登錄,進行配置 找到無線客戶端配置,先在基本配置中打開5G配置,然后再去5.8G配置中設置 …

Android 平臺架構系統啟動流程詳解

目錄 一、平臺架構模塊 1.1 Linux 內核 1.2 硬件抽象層 (HAL) 1.3 Android 運行時 1.4 原生 C/C 庫 1.5 Java API 框架 1.6 系統應用 二、系統啟動流程 2.1 Bootloader階段 2.2 內核啟動 2.3 Init進程(PID 1) 2.4 Zygote與System Serv…

【Windows下Gitbook快速入門使用】

Windows下Gitbook快速入門使用 1 工具安裝1.1 Node.js下載安裝1.1 環境變量1.2 npm配置1.3 安裝gitbook 2 gitbook使用2.1 gitbook 無法執行2.2 gitbook常用命令 Gitbook是一個軟件,使用Git和Markdown來編排書本; GitBook helps you pushlish beautiful …

RK3588V2--HYM8563TS RTC 實時時鐘適配移植

1. 什么是RTC RTC(Real-Time Clock,實時時鐘)是一種電子設備或芯片,它用于保持當前時間和日期,即使系統關閉或斷電也能持續計時。RTC 通常用于計算機、嵌入式系統、物聯網設備等需要精確時間管理的場景。 1.1 RTC 的…

MHA集群

一.MHA集群 MHA master high avavibility 主服務器高可用 如上圖所示,我們之前說過,如果在主從復制架構中主服務器出現故障,就需要我們將從服務器作為主服務器,等故障的主服務器修復好之后,再將修好的主服務器作為從服…

10 【HarmonyOS NEXT】 仿uv-ui組件開發之Avatar頭像組件開發教程(一)

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! 目錄 第一篇:Avatar 組件基礎概念與設計1. 組件概述2. 接口設計2.1 形狀類型定義2.2 尺寸類型定義2.3 組件屬性接口 3. 設計原則4. 使用…

微信小程序+SpringBoot的單詞學習小程序平臺(程序+論文+講解+安裝+修改+售后)

感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以給我留言咨詢,我會一一回復,希望幫助更多的人。 系統背景 (一)社會需求背景 在全球化的大背景下,英語作為國際…

鴻蒙HarmonyOS評論功能小demo

評論頁面小demo 效果展示 1.拆解組件,分層搭建 我們將整個評論頁面拆解為三個組件,分別是頭部導航,評論項,回復三個部分,然后統一在index界面導入 2.頭部導航界面搭建 Preview Component struct HmNavBar {// 屬性&a…

解析 SQL,就用 sqlparse!

文章目錄 解析 SQL,就用 sqlparse!一、背景:為什么你需要 sqlparse?二、什么是 sqlparse?三、如何安裝 sqlparse?四、簡單易用的庫函數1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…

點云軟件VeloView開發環境搭建與編譯

官方編譯說明 LidarView / LidarView-Superbuild GitLab 我的編譯過程: 安裝vs2019,windows sdk,qt5.14.2(沒安裝到5.15.7),git,cmake3.31,python3.7.9,ninja下載放到…

【一文學會 HTML5】

目錄 HTML概述基本概念HTML 發展歷程HTML 基本結構 網頁基本標簽標題標簽&#xff08;<h1> - <h6>&#xff09;段落標簽&#xff08;<p>&#xff09;換行標簽&#xff08;<br>&#xff09;水平線標簽&#xff08;<hr>&#xff09;注釋&#xff0…

Spring Boot面試問答

1. Spring Boot 基礎知識 問題 1:什么是Spring Boot?它與Spring框架有何不同? 回答: Spring Boot是基于Spring框架的一個開源框架,旨在簡化新Spring應用的初始化和開發過程。與傳統的Spring框架相比,Spring Boot提供了以下優勢: 自動配置:根據項目依賴自動配置Spring…

DeepSeek系列模型技術報告的閱讀筆記

DeepSeek系列模型技術報告的閱讀筆記 之前仔細閱讀了DeepSeek系列模型的主要技術方面內容與發展脈絡&#xff0c;以下是DeepSeek系列模型技術報告的筆記&#xff0c;有錯誤的地方歡迎指正&#xff01; 文章目錄 DeepSeek系列模型技術報告的閱讀筆記GQADeepseek MoEAbstractIn…

MyBatis @Param 注解詳解:多參數傳遞與正確使用方式

Param 注解主要用于 MyBatis 進行參數傳遞時給 SQL 語句中的參數 起別名&#xff0c;通常用于 多參數 方法&#xff0c;使參數在 XML Mapper 文件或注解 SQL 語句中更清晰易用。 1. 基本用法 在 Mapper 接口中使用 Param 來為參數命名&#xff0c;避免 MyBatis 解析時出現參數…