Node.js—簡介


一、Node.js是什么

1. 基本概述

Node.js是一個可以讓JavaScript運行在服務器端的平台。它是一個為實時Web應用開發而誕生的平台,它從誕生之初就充分考慮了在實時響應、超大規模數據要求下架構的可擴展性。這使得它摒棄了傳統平台依靠多線程來實現高並發的設計思路,而采用了單線程、異步I/O、事件驅動式的程序設計模式。

Node.js 有着強大而靈活的包管理器(node package manager, npm),目前已經有上萬個第三方模塊,其中有網站開發框架,有 MySQL、PostgreSQL、MongoDB數據庫接口,有模板語言解析、 CSS 生成工具、郵件、加密、圖形、調試支持,甚至還有圖形用戶界面和操作系統 API工具。

Node.js 可以作為服務器向用戶提供服務,與 PHP、 Python、 Ruby on Rails 相比,它跳過了 Apache、 Nginx 等 HTTP服務器,直接面向前端開發。 Node.js 的許多設計理念與經典架構(如 LAMP)有着很大的不同,可提供強大的伸縮能力 。

2. 相關名詞介紹

(1) JavaScript

JavaScript是由ECMAScript、文檔對象模型(DOM)和瀏覽器對象模型(BOM)組成的,而Mozilla則指出JavaScript由Core JavaScript和Client JavaScript組成的。Node.js中的JavaScript只是Core JavaScript,或者說是ECMAScript的一個實現,不包含DOM、BOM或者Client JavaScript,這是因為Node.js不運行在瀏覽器中,所以不需要使用瀏覽器中的許多特性。

(2) V8引擎

Node.js 的 JavaScript 引擎是 V8,來自 Google Chrome 項目。 V8 號稱是目前世界上最快的 JavaScript 引擎,經歷了數次引擎革命,它的 JIT(Just-in-time Compilation,即時編譯)執行速度已經快到了接近本地代碼的執行速度。 Node.js 不運行在瀏覽器中,所以也就不存在 JavaScript 的瀏覽器兼容性問題,你可以放心地使用 JavaScript 語言的所有特性。

二、Node.js能做什么

  • 具有復雜邏輯的網站;
  • 基於社交網絡的大規模 Web 應用;
  • Web Socket 服務器;
  • TCP/UDP 套接字應用程序;
  • 命令行工具;
  • 交互式終端程序;
  • 帶有圖形用戶界面的本地應用程序;
  • 單元測試工具;
  • 客戶端 JavaScript 編譯器;
  • Node.js 內建了 HTTP 服務器支持,也就是說你可以輕而易舉地實現一個網站和服務器的組合。

三、Node.js異步I/O與事件驅動

Node.js 最大的特點就是采用異步式 I/O 與事件驅動的架構設計。 傳統高並發架構方案是多線程模式,Node.js 使用的是單線程模型,對於所有 I/O 都采用異步式的請求方式,避免了頻繁的上下文切換。 Node.js 在執行的過程中會維護一個事件隊列,程序在執行時進入事件循環等待下一個事件到來,每個異步式 I/O 請求完成后會被推送到事件隊列,等待程序進程進行處理。

Node.js 的異步機制是基於事件的,所有的磁盤 I/O、網絡通信、數據庫查詢都以非阻塞的方式請求,返回的結果由事件循環來處理。

Node.js 進程在同一時刻只會處理一個事件,完成后立即進入事件循環檢查並處理后面的事件。這樣做的好處是,CPU 和內存在同一時間集中處理一件事,同時盡可能讓耗時的 I/O 操作並行執行。對於低速連接攻擊, Node.js 只是在事件隊列中增加請求,等待操作系統的回應,因而不會有任何多線程開銷,很大程度上可以提高 Web 應用的健壯性,防止惡意攻擊。

四、Node.js性能

Node.js 用異步式 I/O 和事件驅動代替多線程,帶來了可觀的性能提升。 Node.js 除了使用 V8 作為JavaScript引擎以外,還使用了高效的 libev 和 libeio 庫支持事件驅動和異步式 I/O。

Node.js 的開發者在 libev 和 libeio 的基礎上還抽象出了層 libuv。對於 POSIX①操作系統,libuv 通過封裝 libev 和 libeio 來利用 epoll 或 kqueue。

五、CommonJS規范

CommonJS 誕生了。 CommonJS 試圖定義一套普通應用程序使用的API,從而填補 JavaScript 標准庫過於簡單的不足。

CommonJS 規范包括了模塊(modules)、包(packages)、系統(system)、二進制(binary)、控制台(console)、編碼(encodings)、文件系統(filesystems)、套接字(sockets)、單元測試(unit testing)等部分。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM