當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
理解NodeJS
# 理解NodeJS近幾年Node被炒的火熱,總應該了解一下Node是什么?能解決什么問題?## Node是什么?
Node是運行在服務器上的JavaScript解釋器,可以理解為服務器上并且可以解釋JavaScript的虛擬機。Node的優勢在于異步運行,伸縮性好。此外,JavaScript可以在前后端運行,有利于統一代碼格式。## 為什么用Node?Node官方稱,“可以創建快速地、可伸縮的網絡應用”。與Java和PHP等服務端語言不同的是,Node使用的是事件驅動,非阻塞的IO模型能夠讓Node高效運行,尤其適用于對數據敏感的實時應用,比如微博、微信等。**事件驅動**事件驅動編程模型,是根據事件做出響應。為程序運行過程中遇到的事件綁定響應函數,那么每當這個事件被觸發時,都可以做出相應的響應。例如瀏覽器向服務器請求某個頁面,服務器獲得請求之后,需要先讀取這個頁面相應的內容,并發送給瀏覽器。服務器在等待頁面讀取的過程中,就會浪費幾毫秒,雖然幾毫秒對于瀏覽器而言不重要,而對于處理大量請求的服務器就很可觀了。在事件驅動模型中,只要定義了獲得請求后的處理函數和讀取頁面完成的響應函數,那么在讀取頁面內容的過程中,服務器還可以處理其他請求。當頁面讀取完成后,再將頁面內容返回給瀏覽器。如果對于有大量IO的服務器而言,事件驅動的編程模型就十分重要。事件驅動的編程模型并不新鮮,但是卻能給應用程序帶來性能的很大的提升,是因為事件驅動避免了阻塞狀態。順序執行的代碼,每次調用其他模塊的代碼,都要等待其他模塊返回結果,這就是阻塞狀態。應用程序總會調用其他模塊,也總會出現阻塞狀態,必然降低程序的執行效率。在本地應用中,多線程很好的解決了這一問題。如果某個作業執行時間長,那么就給他另行分配一個線程。這樣耗時長的作業不會影響到整個應用的執行效率。而在服務器中,為很多應用服務,需要處理很多鏈接和請求。因此通常會為每個鏈接分配一個線程,多線程在服務器編程中變得十分常見。然而在網絡應用中,多線程并沒有真正解決阻塞的問題。每個線程都分配了相應的內存和CPU時間,每個線程服務于某一個連接。然而對于某一個線程而言,服務的狀態也會存在阻塞,比如在等待客戶端回應的時間里。**多線程實現的非阻塞網絡連接和事件驅動的非阻塞網絡連接**多線程的網絡連接可以避免等待頁面讀取、數據庫查詢等處理過程的阻塞,可以提高服務器的響應速度。但是這并不意味著這就是最好的實現方式。比如在Java實現的服務器上,為每個session分配一個線程,而每個線程需要占據2M的內存。對于一個8G內存的服務器,理論上能夠同時服務4000個用戶。但是隨著客戶群的增長,必須要配置更多的服務器,服務器的成本會越來越高。那么這么Web應用的瓶頸就是,服務器能夠處理的并發連接的最大數量。Node是如何解決高并發的問題的呢?Node不會為每一個連接分配一個線程,而是每個連接、每個請求都觸發一個事件。Node在進程中不斷的處理事件,沒有阻塞I/O的調用,也沒有線程之間的輪詢。因此,Node服務器被認為有能力處理數萬個并發連接的程序。## Node如何工作?
Node是在V8引擎上運行的服務器,V8是用于Chrome的JavaScript引擎,C++實現的超快的JavaScript解釋器。只要有強大的解釋器支持,服務器端和客戶端都一樣,同樣可以有JavaScript處理各類事件。而且JavaScript在服務器端有更重要的優勢,JavaScript是事件驅動的編程語言。利用匿名函數,JavaScript很容易實現事件驅動的Web服務器。而且JavaScript更容易編寫,只需要監聽各類事件,編寫相應的回調函數,剩下的都由系統處理。**參考:**[NodeJS入門](http://www.nodebeginner.org/index-zh-cn.html)[Node.js 究竟是什么?](http://www.ibm.com/developerworks/cn/opensource/os-nodejs/)[被誤解的 Node.js](http://www.ibm.com/developerworks/cn/web/1201_wangqf_nodejs/)
轉載于:https://www.cnblogs.com/hongyanee/p/3450290.html
總結
- 上一篇: 地址转换协议ARP
- 下一篇: 转: ajax跨域之JSONP