nodejs不是js,而是一個讓js運作在服務端的平台。 js(全名為JavaScript)是一種程式語言,而Node則是基於Chrome V8引擎的JavaScript運行環境,一種讓JavaScript運行在服務端的開發平台。
本教學操作環境: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 寫的)。底層程式碼中,近半數都用於事件佇列、回呼函數佇列的建置。用事件驅動來完成伺服器的任務調度,這是鬼才才能想到的。針尖上的舞蹈,用一個線程,擔負起了處理非常多的任務的使命。
注意這裡的事件循環,也可以說是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實現即時通知。
以上是nodejs是js麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

React是構建動態和交互式用戶界面的首選工具。 1)組件化與JSX使UI拆分和復用變得簡單。 2)狀態管理通過useState鉤子實現,觸發UI更新。 3)事件處理機制響應用戶交互,提升用戶體驗。

React是前端框架,用於構建用戶界面;後端框架用於構建服務器端應用程序。 React提供組件化和高效的UI更新,後端框架提供完整的後端服務解決方案。選擇技術棧時需考慮項目需求、團隊技能和可擴展性。

HTML和React的關係是前端開發的核心,它們共同構建現代Web應用的用戶界面。 1)HTML定義內容結構和語義,React通過組件化構建動態界面。 2)React組件使用JSX語法嵌入HTML,實現智能渲染。 3)組件生命週期管理HTML渲染,根據狀態和屬性動態更新。 4)使用組件優化HTML結構,提高可維護性。 5)性能優化包括避免不必要渲染,使用key屬性,保持組件單一職責。

React是構建交互式前端體驗的首選工具。 1)React通過組件化和虛擬DOM簡化UI開發。 2)組件分為函數組件和類組件,函數組件更簡潔,類組件提供更多生命週期方法。 3)React的工作原理依賴虛擬DOM和調和算法,提高性能。 4)狀態管理使用useState或this.state,生命週期方法如componentDidMount用於特定邏輯。 5)基本用法包括創建組件和管理狀態,高級用法涉及自定義鉤子和性能優化。 6)常見錯誤包括狀態更新不當和性能問題,調試技巧包括使用ReactDevTools和優

React是一個用於構建用戶界面的JavaScript庫,其核心是組件化和狀態管理。 1)通過組件化和狀態管理簡化UI開發。 2)工作原理包括調和和渲染,優化可通過React.memo和useMemo實現。 3)基本用法是創建並渲染組件,高級用法包括使用Hooks和ContextAPI。 4)常見錯誤如狀態更新不當,可使用ReactDevTools調試。 5)性能優化包括使用React.memo、虛擬化列表和CodeSplitting,保持代碼可讀性和可維護性是最佳實踐。

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

React組件可以通過函數或類定義,封裝UI邏輯並通過props接受輸入數據。 1)定義組件:使用函數或類,返回React元素。 2)渲染組件:React調用render方法或執行函數組件。 3)復用組件:通過props傳遞數據,構建複雜UI。組件的生命週期方法允許在不同階段執行邏輯,提升開發效率和代碼可維護性。

React嚴格模式是一種開發工具,可通過激活其他檢查和警告來突出反應應用中的潛在問題。它有助於識別遺產代碼,不安全的生命週期和副作用,鼓勵現代反應實踐。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。