Node.js綜述

來源:互聯網
上載者:User

標籤:進入   發行版   bio   檔案操作   項目   str   大量   cos      

前言本綜述文章旨在協助讀者深入理解下Node.js的本質,不去關注應用的細節,我認為真正的技術問題只有在動手寫代碼的時候才會遇到,那個階段解決問題才是真正有意義的。 發展史Node.js是Ryan Dahl 2009年對外發布的開源醒目,後來該項目被Joyent公司注意到並於2010年成為Joyent公司的一個子項目。2016年微軟與Joyent公司合作,Node.js在windows上得到支援。目前Node.js的版本為V6.11,周圍已經形成了一個龐大的生態系統。 特性分析Node.js is a JavaScript runtime built on Chrome‘s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js‘ package ecosystem, npm, is the largest ecosystem of open source libraries in the world.上面是Node.js的官方描述,其中包含了Node.js最突出的特點。 1、Javascript runtime這個描述解答了Node.js是什麼的問題。它是一個Javascript 運行環境,類似於JVM之於Java,Node.js負責將Javascript轉化為電腦可以識別的機器語言,同時對外提供API。傳統上javascript依附於瀏覽器運行:Node.js捨棄了瀏覽器,直接與js引擎對接,通過js引擎提供的API,Node.js可以完成其他後端語言(java)所能完成的一切功能,例如檔案操作、網路通訊、裝置管理等等。下面說下Node.js所採用的js引擎——V8,這是目前世界上最快的js引擎,來自於Google Chrome項目,用C++語言編寫,憑藉Goole強大的支援人員,它的執行速度已經接近本地代碼的執行速度。除了V8以外,Node.js的還是用了libev和libio庫支援事件驅動和非同步IO,,libuv是在libev和libeio的基礎上抽象出的一層,對於POSIX系統,libuv利用epoll或者kqueue,而在Windows系統中,libuv使用了IOCP機制,以在不同的平台下實現統一的高效能。 2、non-blocking IO and event-driven先說說非阻塞IO,假設一個請求要讀取資料庫,db.query(select * from table),這個過程涉及磁碟讀取與網路通訊,耗時很長,下面是幾種伺服器處理方式。(1)如果是單線程+阻塞處理,前端會等待資料讀取完畢才接受到訊息,同時後續的請求也得等待,這樣的系統是不能忍受的。 (2)好在現在的後端容器都是支援多線程+阻塞的,其解決思路如下:等待資料的現場繼續等待,如果有新請求就重新建立一個線程,把cpu讓給新的線程,待原線程得到資料後再把cpu切換給原線程。這樣做有什麼缺點嗎?一是大量請求的情況下線程數目不斷增加,浪費大量系統資源。二是CPU在處理環境切換的時候也浪費了不少時間。 (3)Node.js的解決思路則完全不一樣。它被設計成單線程+非阻塞的。所有的請求都在一個線程處理,一旦遇到耗時的請求,cpu不等待資料返回,而是接著處理後續的請求。那麼問題來了,前面請求的資料到達後,如何返回給前端呢?這就要牽扯到Node.js的另外一個特性——事件驅動。在上面的簡化模型中,所有的請求會依次進入線程的處理迴圈中,每個請求內建回呼函數,當耗時請求接受完資料後,回呼函數自動被調用,重新進去迴圈處理,直到資料被返回給前端。這樣能讓單個CPU充分運行起來,沒有絲毫等待,同時避免了在不同的線程中頻繁切換引起的浪費。根據統計,Node.js相對傳統的PHP+Nginx,在效能上有明顯提升。這種設計思路就是為微服務web系統而生的,因為web服務的特點就是請求密集、計算量小、要求快速響應。 Node.js的缺點1、對於長期佔據CPU的請求,後續的請求不能得到及時處理,產生較大延時,所以Node.js不適合計算密集型應用。2、Node.js專註單線程處理,在多核環境中,必須總多進城才能充分利用多核,因此增加了設計難度。3、Node.js的非同步式編程模式不太符合一般的程式控制思路,給編碼和調試帶來不少困難。 常用輔助架構

1、npm(Node Package Manager)

Node.js本身提供的API比較底層,完全依靠Node.js實現一個系統對技術人員要求比較高。不過現在已經有大量的第三方支援供開發人員使用。為了更好地使用和管理這些第三方提供的包,Node.js官方提供了一個基於命令列的包管理工具——npm.

npm完全由javascript實現,不屬於Node.js的一部分。不過在Node.js0.6開始,npm會自動包含在發行版中。

2、Express

參考《Node.js開發指南》

Node.js綜述

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.