首頁 web前端 前端問答 nodejs是js麼

nodejs是js麼

Nov 01, 2021 pm 03:34 PM
javascript js nodejs

nodejs不是js,而是一個讓js運作在服務端的平台。 js(全名為JavaScript)是一種程式語言,而Node則是基於Chrome V8引擎的JavaScript運行環境,一種讓JavaScript運行在服務端的開發平台。

nodejs是js麼

本教學操作環境:windows7系統、nodejs 12.19.0版,DELL G3電腦。

nodejs不是js,而是一個讓js運作在服務端的平台。

Node.js發佈於2009年5月,由Ryan Dahl開發,是一個基於Chrome V8引擎的JavaScript運行環境,使用了一個事件驅動、非阻塞式I/O模型, 讓JavaScript 運行在服務端的開發平台,它讓JavaScript成為與PHP、Python、Perl、Ruby等服務端語言平起平坐的腳本語言。

JavaScript基於Node.js技術可以進行伺服器端程式設計。

Node.js的特點

#非阻塞異步io

例如,當在訪問資料庫取得資料的時候,需要一段時間。在傳統的單執行緒處理機制中,在執行了存取資料庫程式碼之後,整個執行緒都將暫停下來,等待資料庫回傳結果,才能執行後面的程式碼。也就是說,I/O阻塞了程式碼的執行,大大降低了程式的執行效率。

由於Node.js 中採用了非阻塞型I/O機制,因此在執行了存取資料庫的程式碼之後,將立即轉而執行其後面的程式碼,把資料庫傳回結果的處理程式碼放在在回調函數中,從而提高了程式的執行效率。

當某個I/O執行完畢時,將以事件的形式通知執行I/O操作的線程,執行緒執行這個事件的回呼函數。為了處理非同步I/O,執行緒必須有事件循環,不斷的檢查有沒有未處理的事件,依序加以處理。

阻塞模式下,一個執行緒只能處理一項任務,要提高吞吐量必須通過多執行緒。而非阻塞模式下,一個執行緒永遠在執行運算操作,這個執行緒的CPU核心利用率永遠是100%。所以,這是一個特別有哲理的解決方案:與其人多,但是好多人閒著;還不如一個人玩命,往死裡幹活兒。

單執行緒

在 Java、PHP 或 .net 等伺服器端語言中,會為每個用戶端連線建立一個新的執行緒。而每個線程需要耗費大約2MB記憶體。也就是說,理論上,一個8GB記憶體的伺服器可以同時連接的最大用戶數為4000個左右。要讓Web應用程式支援更多的用戶,就需要增加伺服器的數量,而 Web 應用程式的硬體成本當然就上升了。

Node.js不會為每個客戶連接建立一個新的線程,而只使用一個線程。當有使用者連線了,就觸發一個內部事件,透過非阻塞I/O、事件驅動機制,讓 Node.js 程式宏觀也是並行的。使用 Node.js ,一個8GB記憶體的伺服器,可以同時處理超過4萬用戶的連線。

另外,單一執行緒帶來的好處,作業系統完全不再有執行緒建立、銷毀的時間開銷。但單線程也有很多弊端,會在 Node.js 的弊端詳細解說,請繼續看下去。

事件驅動

在 Node 中,客戶端請求建立連接,提交資料等行為,會觸發對應的事件。在Node 中,在一個時刻,只能執行一個事件回呼函數,但是在執行一個事件回呼函數的中途,又有其他事件產生,可以轉而處理其他事件(比如,又有新用戶連接了),然後傳回繼續執行原事件的回呼函數,這種處理機制,稱為「事件環」機制。

Node.js 底層是 C (V8也是C 寫的)。底層程式碼中,近半數都用於事件佇列、回呼函數佇列的建置。用事件驅動來完成伺服器的任務調度,這是鬼才才能想到的。針尖上的舞蹈,用一個線程,擔負起了處理非常多的任務的使命。

nodejs是js麼

注意這裡的事件循環,也可以說是Node.js 的一個精髓所在,下面引用一段Node.js 官網的內容

  ┌───────────────────────────┐
┌─>│           timers          │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │     pending callbacks     │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │       idle, prepare       │
│  └─────────────┬─────────────┘      ┌───────────────┐
│  ┌─────────────┴─────────────┐      │   incoming:   │
│  │           poll            │<─────┤  connections, │
│  └─────────────┬─────────────┘      │   data, etc.  │
│  ┌─────────────┴─────────────┐      └───────────────┘
│  │           check           │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
└──┤      close callbacks      │
   └───────────────────────────┘
登入後複製

引用Node官網中的一段內容:

注意:每個框將被稱為事件循環的「階段」。
每個階段都有一個要執行的回呼FIFO佇列。雖然每個階段都以其自己的方式特殊,但通常情況下,當事件循環進入給定階段時,它將執行特定於該階段的任何操作,然後在該階段的隊列中執行回調,直到隊列耗盡或最大回調數量為止已執行。當佇列耗盡或達到回呼限制時,事件循環將移至下一階段,依此類推。
關於事件循環是一個核心點,常常會被面試官考具體執行輸出的問題,大家可以看我的這篇文章

##跨平台

起初,Node 只能在 Linux 平台上運作。後來隨著Node的發展,微軟注意到了它的存在,並投入了一個團隊幫助 Node 實現 Windows 平台的兼容,在v0.6.0版本發佈時,Node 已經能夠直接在 Window 平台運行了。 Node 是基於libuv實作跨平台的。

Node.js的弊端

#單一執行緒帶來的弊端

Node.js中有一個特點是單線程,它帶來了很多好處,但是它也有弊端,單線程弱點如下。

  • 無法利用多核心CPU

  • 錯誤會造成整個應用程式退出無法繼續呼叫非同步I/O

  • 大量運算佔用CPU導致無法繼續呼叫非同步I/O

#Node.js的應用程式場景

介紹了Node.js的特色和弊端,再說一下Node.js的應用程式場景。

Node.js適合用來開發什麼樣的應用程式呢?

善於I/O,不善於計算。因為Node.js最擅長的就是任務調度,如果你的業務有很多的CPU 計算,實際上也相當於這個計算阻塞了這個單線程,就不太適合Node開發,但是也不是沒有解決方案,只是說不太適合。

當應用程式需要處理大量並發的I/O,而在向客戶端發出回應之前,應用程式內部並不需要進行非常複雜的處理的時候,Node.js非常適合。 Node.js也非常適合與web socket配合,開發長連接的即時互動應用程式。

具體場景可以表現為如下:

  • 第一大類:使用者表單收集系統、後台管理系統、即時互動系統、考試系統、連網軟體、高並發量的web應用程式;

  • 第二大類:基於web、canvas等多人連網遊戲;

  • 第三大類:基於web的多人即時聊天用戶端、聊天室、圖文直播;

  • 第四大類:單頁瀏覽器應用程式;

  • #第五大類:操作資料庫、為前端和行動端提供基於json的API;

  • #第六大類,…

  • ##哪些大公司在用
  • Yahoo:雅虎開放了Cooktail框架,將YUI3這個前端框架的能力借助Node延伸到了伺服器端。

  • 騰訊:將Node套用到長連接,以提供即時功能。

  • 花瓣網,蘑菇街:透過socket.io實現即時通知。

阿里:主要利用的是並行I/O這個效能,實現高效率的分散式,它們自己也出了很多Node框架

LinkedIn:行動網站也是使用的Node############網易:遊戲領域對同時和即時要求很高,網易開源了Node的即時框架pomelo######### ###等等…############【推薦學習:《###nodejs 教學###》】###

以上是nodejs是js麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

nodejs是後端框架嗎 nodejs是後端框架嗎 Apr 21, 2024 am 05:09 AM

Node.js 可作為後端框架使用,因為它提供高效能、可擴展性、跨平台支援、豐富的生態系統和易於開發等功能。

nodejs怎麼連接mysql資料庫 nodejs怎麼連接mysql資料庫 Apr 21, 2024 am 06:13 AM

要連接 MySQL 資料庫,需要遵循以下步驟:安裝 mysql2 驅動程式。使用 mysql2.createConnection() 建立連接對象,其中包含主機位址、連接埠、使用者名稱、密碼和資料庫名稱。使用 connection.query() 執行查詢。最後使用 connection.end() 結束連線。

nodejs中的全域變數有哪些 nodejs中的全域變數有哪些 Apr 21, 2024 am 04:54 AM

Node.js 中存在以下全域變數:全域物件:global核心模組:process、console、require執行階段環境變數:__dirname、__filename、__line、__column常數:undefined、null、NaN、Infinity、-Infinity

nodejs和java的差別大嗎 nodejs和java的差別大嗎 Apr 21, 2024 am 06:12 AM

Node.js 和 Java 的主要差異在於設計和特性:事件驅動與執行緒驅動:Node.js 基於事件驅動,Java 基於執行緒驅動。單執行緒與多執行緒:Node.js 使用單執行緒事件循環,Java 使用多執行緒架構。執行時間環境:Node.js 在 V8 JavaScript 引擎上運行,而 Java 在 JVM 上運行。語法:Node.js 使用 JavaScript 語法,而 Java 使用 Java 語法。用途:Node.js 適用於 I/O 密集型任務,而 Java 適用於大型企業應用程式。

nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 Apr 21, 2024 am 05:18 AM

Node.js 安裝目錄中有兩個與 npm 相關的文件:npm 和 npm.cmd,區別如下:擴展名不同:npm 是可執行文件,npm.cmd 是命令視窗快捷方式。 Windows 使用者:npm.cmd 可以在命令提示字元中使用,npm 只能從命令列執行。相容性:npm.cmd 特定於 Windows 系統,npm 跨平台可用。使用建議:Windows 使用者使用 npm.cmd,其他作業系統使用 npm。

nodejs是後端開發語言嗎 nodejs是後端開發語言嗎 Apr 21, 2024 am 05:09 AM

是的,Node.js 是一種後端開發語言。它用於後端開發,包括處理伺服器端業務邏輯、管理資料庫連接和提供 API。

nodejs專案怎麼部署到伺服器 nodejs專案怎麼部署到伺服器 Apr 21, 2024 am 04:40 AM

Node.js 專案的伺服器部署步驟:準備部署環境:取得伺服器存取權限、安裝 Node.js、設定 Git 儲存庫。建置應用程式:使用 npm run build 產生可部署程式碼和相依性。上傳程式碼到伺服器:透過 Git 或檔案傳輸協定。安裝依賴項:SSH 登入伺服器並使用 npm install 安裝應用程式相依性。啟動應用程式:使用 node index.js 等命令啟動應用程序,或使用 pm2 等進程管理器。設定反向代理(可選):使用 Nginx 或 Apache 等反向代理路由流量到應用程式

nodejs和java選哪個 nodejs和java選哪個 Apr 21, 2024 am 04:40 AM

Node.js 和 Java 在 Web 開發中各有優劣,因此選擇取決於專案需求。 Node.js 擅長即時應用程式、快速開發和微服務架構,而 Java 則在企業級支援、效能和安全性方面佔優。

See all articles