本篇文章主要的介紹了關於node.js的定義介紹,還有關於node.js的作用總結,希望大家多學習,讓我們一起來看這篇文章吧
首先我們先來看看node.js能做些什嗎?
這是node比較正式的介紹
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。
Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。(事件驅動:事件觸發過程中,進行決策的一種策略,簡單說就是跟隨目前時間點上出現的事物,調用可用的資源進行解決該事物,使得不斷出現的事物得以解決,防止事物堆積)
Node.js 的包管理器 npm,成為世界上最大的開放原始碼的生態系統。想要知道更多就來topic.alibabacloud.comnode.js視頻教程
這些都是關於nodejs的定義,現在看看nodejs的作用總結:
node.js有幾個特別顯著的優點:快,效能高,開發效率高,應用範圍廣
別人一般會含糊的告訴你:node.js有非阻塞,事件驅動I/O等特性,從而讓高並發(high concurrency)的輪詢(Polling)和comet構建的應用中成為可能。
當你看完這些解釋覺得還是不太理解的時候,下面我就簡單粗暴的來協助你你理解理解node.js。
瀏覽器給網站發請求的過程一直沒怎麼變過。當瀏覽器給網站發了請求。伺服器收到了請求,然後開始搜尋被請求的資源。如果有需要,伺服器還會查詢一下資料庫,最後把響應結果傳回瀏覽器。
不過,在傳統的web伺服器中(比如Apache),每一個請求都會讓伺服器建立一個新的進程來處理這個請求。
後來有了Ajax。有了Ajax,我們就不用每次都請求一個完整的新頁面了,取而代之的是,每次只請求需要的部分頁面資訊就可以了。這顯然是一個進步
。但是比如你要建一個FriendFeed這樣的社交網站(類似人人網那樣的刷朋友新鮮事的網站),你的好友會隨時的推送新的狀態,然後你的新鮮事會即時自動重新整理。
要達成這個需求,我們需要讓使用者一直與伺服器保持一個有效串連。目前最簡單的實現方法,就是讓使用者和伺服器之間保持長輪詢(long polling)。
HTTP請求不是持續的串連,你請求一次,伺服器響應一次,然後就完了。長輪詢是一種利用HTTP類比持續串連的技巧。具體來說,只要頁面載入了,不管你需不需要伺服器給你響應資訊,你都會給伺服器發一個Ajax請求。
這個請求不同於一般的Ajax請求,伺服器不會直接給你返回資訊,而是它要等著,直到伺服器覺得該給你發資訊了,它才會響應。比如,你的好友發了一條新鮮事,伺服器就會把這個新鮮事當做響應發給你的瀏覽器,然後你的瀏覽器就重新整理頁面了。瀏覽器收到響應重新整理完之後,再發送一條新的請求給伺服器,這個請求依然不會立即被響應。於是就開始重複以上步驟。利用這個方法,可以讓瀏覽器始終保持等待響應的狀態。雖然以上過程依然只有非持續的Http參與,但是我們類比出了一個看似持續的串連狀態
我們再看傳統的伺服器(比如Apache)。每次一個新使用者連到你的網站上,你的伺服器就得開一個串連。每個串連都需要佔一個進程,這些進程大部分時間都是閑著的(比如等著你好友發新鮮事,等好友發完才給使用者響應資訊。或者等著資料庫返回查詢結果什麼的)。
雖然這些進程閑著,但是照樣佔用記憶體。這意味著,如果使用者串連數的增長到一定規模,你伺服器沒準就要耗光記憶體直接癱了。
這種情況怎麼解決?解決方案就是剛才上邊說的:非阻塞和事件驅動。這些概念在我們談的這個情景裡面其實沒那麼難理解。
你把非阻塞的伺服器想象成一個loop迴圈,這個loop會一直跑下去。一個新請求來了,這個loop就接了這個請求,把這個請求傳給其他的進程(比如傳給一個搞資料庫查詢的進程),然後響應一個回調(callback)。完事了這loop就接著跑,接其他的請求。這樣下來。伺服器就不會像之前那樣傻等著資料庫返回結果了。
如果資料庫把結果返回來了,loop就把結果傳回使用者的瀏覽器,接著繼續跑。在這種方式下,你的伺服器的進程就不會閑著等著。從而在理論上說,同一時刻的資料庫查詢數量,以及使用者的請求數量就沒有限制了。伺服器只在使用者那邊有事件發生的時候才響應,這就是事件驅動。
FriendFeed是用基於Python的非阻塞架構Tornado (知乎也用了這個架構) 來實現上面說的新鮮事功能的。不過,Node.js就比前者更妙了。
Node.js的應用是通過javascript開發的,然後直接在Google的變態V8引擎上跑。用了Node.js,你就不用擔心使用者端的請求會在伺服器裡跑了一段能夠造成阻塞的代碼了。因為javascript本身就是事件驅動的指令碼語言。你回想一下,在給前端寫javascript的時候,更多時候你都是在搞事件處理和回呼函數。javascript本身就是給事件處理量身定製的語言。
Node.js還是處於初期階段。如果你想開發一個基於Node.js的應用,你應該會需要寫一些很底層代碼。
但是下一代瀏覽器很快就要採用WebSocket技術了,從而長輪詢也會消失。在Web開發裡,Node.js這種類型的技術只會變得越來越重要。
以上就是本篇關於node.js的總結了,很詳細,希望都能多看看,讓大家更好的理解node.js。想要學更多的同學可以去topic.alibabacloud.comNode.js開發手冊欄目