相關推薦:《nodejs 教學》
作為一個JS的粉忠實粉絲,雖然JS並沒有JAVA的生態圈這麼大,但是JavaScript從客戶端腳本程式躋身伺服器端,這讓我們要重視一下它,JavaScript它正在慢慢崛起,我們要換一種眼光去學習它。
Node.js是什麼?
Nodejs本質上是一個JavaScript的運作環境。
基於Google的V8引擎,實際上,是從Chrome上摳下的V8引擎並加以封裝的一個執行環境。
我們去官網下載包,傻瓜式安裝。
Node下載官網:https://nodejs.org/en/download/
在命令列輸入node 就能執行javaScript腳本。
Node.js的優勢?為什麼腳本語言JavaScript能作為伺服器語言?
優點1 Node.js有超強的高同時能力
## Node.js的首發目標,是提供一種簡單的,用語創建高效能伺服器及在該伺服器中運行各種應用程式的開發工具。 相對於Java,PHP或.net 等經典伺服器端語言中,Node.js正像一個年輕力勝的小伙子,Java語言會為每一個客戶端創建一個新的線程,而每一個客戶端連線建立一個線程,需要耗費2MB的記憶體。也就是說。理論上一個8GB的伺服器可以同時連接用戶數為4000個左右,要存在高並發支援更多的用戶,必須額外增加伺服器。Node.js不會為每位顧客連線建立一個新的執行緒,而只使用一個執行緒。
這是Node基於單一執行緒(只有一個主執行緒去接請求,給予回應) 那麼這不是更慢嗎?事實上,並不是這樣。 Node.js當接收到一個使用者連接,就會觸發一個內部事件。透過事先定義好的函數,達到響應用戶的行為。 Node.js主線程並不關心程式要走什麼流程,實際上,有另外的工作線程去幫Node主線程去訪問文件,讀數據庫,當工作線程讀取到文件數據,或數據庫裡面的數據,就會把回呼函數回傳給Node主執行緒去執行,例如把找到的資料傳回客戶端,關閉連接一些操作。 (這就是Node非阻塞I/O,基於事件驅動)。下面附上我畫的圖(如有不當之處請見諒哈)
# 這時候我們腦袋裡面應該有個雛形,就是--Node.js主線程一直在接收請求和回應請求這個活裡面倒騰,這樣它就可以不停地接收多個客戶端發過來的請求,它不用傻傻去等待IO操作,IO工作執行緒找到了數據,就會觸發事件回呼函數告訴主執行緒資料已經拿到了,這時候主線就執行回呼函數,把資料回傳給客戶端。 理論上,8G記憶體的伺服器,可以同時容納3到4萬用戶的連線。 這就是Node的閃光之處(單線程,非阻塞IO,事件驅動)優點 2 Node用的是JavaScript的語法
Node.JS 基於javaScript 的V8引擎,也就是說只要會JS的語法,就能用於後端開發,但是Node官方推薦用ECMA Script6(ES6)語法。
Node打破了過去JavaScript只能在瀏覽器運作的局面,讓前後端程式設計環境統一,這樣就大幅降低了開發成本。 (這一點對前端開發人員非常友好,JS能做的東西越來越多,前端發展就越來越快)#優點 3 Node.JS 出現促成前端工程化想法
前端近年來發展迅速,Node.js扮演無法取代的角色。Node.js不只是運作環境,也是一門脫胎換骨全新的JavaScript語言,它容納了JS語法基礎,還加入一些內部模組
處理請求回應的模組
fs 用來讀取檔案的模組
url# 套件管理工具,讓我們可以很方便的透過命令列就能下載我們專案所依賴的套件
如:
npm 對## npm install -g create-react-app 等等
定義模組語法 ↓↓
const http = require('http')
const Jquery = require('jquery');
#Node.js 在某種層面上影響前端發展的模式。讓前端工程模組化,開發迅速,降低程式碼耦合度,可維護性大為增強。 Node.js適合做什麼?
以下列舉幾個Node.js應用場景
的優點,但是沒有語言是沒有缺點,Node也不例外。只能是一門語言適用於什麼場景和領域而已。
Node不適應的場景
①CPU運算密集的程式
在Node.js 0.8 版本之前,Node.js 不支援多重執行緒。當然,這是一種設計哲學問題,因為Node.js的開發者和支持者堅信單執行緒和事件驅動的非同步式程式設計比傳統的多執行緒程式設計運行效率更高。但事實上多執行緒可以達到同樣的吞吐量,儘管可能開銷不小,但不必為多核心環境進行特殊的配置。相較之下,Node.js 由於其單執行緒性的特性,必須透過多進程的方法才能充分利用多核心資源。理想情況下,Node.js單執行緒在執行的過程中會將CPU核心完全佔滿,所有的請求必須等待目前請求處理完畢以後進入事件循環才能回應。如果一個應用是計算密集型的,那麼除非你手動將它拆散,否則請求回應延遲將會相當大。例如,某個事件的回呼函數中要進行複雜的計算,佔用CPU 200毫秒,那麼事件循環中所有的請求都要等待200毫秒。為了提高反應速度,你唯一的辦法就是把這個運算密集的部分拆成若干個邏輯,這為程式設計帶來了額外的複雜性。即使這樣,系統的總吞吐量和總響應延遲也不會降低,只是調度稍微公平了一些。不過好在真正的Web 伺服器中,很少會有運算密集的部分,如果真的有,那麼它不應該被實現為即時的回應。正確的方式是給用戶一個提示,說伺服器正在處理中,完成後會通知用戶,然後交給伺服器的其他進程甚至其他專職的伺服器來做這件事。
②單一使用者多任務型應用前面我們討論的通常都是伺服器端編程,其中一個假設就是使用者數量很多。但如果面對的是單一用戶,譬如本地的命令列工具或圖形介面,那麼所謂的大量並發請求就不存在了。於是另一個恐怖的問題出現了,儘管是單一用戶,卻不一定是單任務。例如給使用者提供介面的同時後台在進行某個計算,為了讓使用者介面不出現阻塞狀態,你不得不開啟多執行緒或多進程。而Node.js 執行緒或進程之間的通訊到目前為止還很不便,因為它根本沒有鎖,因而號稱不會死鎖。 Node.js 的多進程往往是在執行相同任務,透過多進程利用多處理器的資源,但遇到多進程相互協作時,就顯得捉襟見肘了。 Node.js 的控制流不是線性的,它被一個個事件拆散,但人的思維卻是線性的,當你試圖轉換思維來迎合語言或編譯器時,就不得不做出犧牲。舉例來說,你要實現一個這樣的邏輯:從銀行取錢,拿錢去買某個虛擬商品,買完以後加入庫存數據庫,這中間的任何一步都可能會涉及數十次的I/O操作,而且任何一次操作失敗以後都要進行回滾操作。這個過程是線性的,已經很複雜了,如果要拆分為非線性的邏輯,那麼其複雜程度很可能就達到無法維護的地步了。 Node.js更善於處理那些邏輯簡單但存取頻繁的任務,而不適合完成邏輯十分複雜的工作。 「好了,以上就是我總結了Node.js。不說了,寫了很久了,去擼程式碼了。」 更多程式相關知識,請訪問:程式設計教學! ! ③邏輯十分複雜的事務
以上是Node.js是什麼?優勢是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!