Node.js—簡介

1、Node.js是什麼

1. 基本概述

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

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

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

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不運行在瀏覽器中,因此不須要使用瀏覽器中的許多特性。node

(2) V8引擎

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

2、Node.js能作什麼

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

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

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

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

Node.js 進程在同一時刻只會處理一個事件,完成後當即進入事件循環檢查並處理後面的事件。這樣作的好處是,CPU 和內存在同一時間集中處理一件事,同時儘量讓耗時的 I/O 操做並行執行。對於低速鏈接攻擊, Node.js 只是在事件隊列中增長請求,等待操做系統的迴應,於是不會有任何多線程開銷,很大程度上能夠提升 Web 應用的健壯性,防止惡意攻擊。瀏覽器

4、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。網絡

5、CommonJS規範

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

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

相關文章
相關標籤/搜索