首頁>技術>

1 - 概覽2 - 歷史2009年2010年2011年2012年2014年2015年2016年3 - 技術3.1 - 執行緒3.2 - V83.3 - npm3.4 - 統一API3.5 - 事件迴圈4 - 開發工具4.1 - 桌面IDE4.2 - 線上編輯器4.3 - 執行時和偵錯程式4.4 - 框架5 - 替代品6 - 其他語言7 - 參見

Node.js 是能夠在伺服器端執行 JavaScript開放原始碼、跨平臺 JavaScript 執行環境

Node.js 由Node.js Foundation(已與JS Foundation合併為OpenJS Foundation)持有和維護,

亦為 Linux 基金會的專案。

Node.js採用Google開發的V8執行程式碼,使用事件驅動、非阻塞和非同步輸入輸出模型等技術來提高效能,可最佳化應用程式的傳輸量和規模

這些技術通常用於資料密集的即時應用程式

Node.js大部分基本模組都用JavaScript語言編寫。

在Node.js出現之前,JavaScript通常作為客戶端程式設計語言使用,以JavaScript寫出的程式常在使用者的瀏覽器上執行。

Node.js的出現使JavaScript也能用於服務端程式設計。

Node.js含有一系列內建模組,使得程式可以脫離Apache HTTP ServerIIS,作為獨立伺服器執行。

目前,Node.js已被IBM、Microsoft、Yahoo!、Walmart、Groupon、SAP、LinkedIn、Rakuten、PayPal、Voxer、GoDaddy等企業採用。

1 - 概覽

Node.js允許透過JavaScript和一系列模組來編寫伺服器端應用和網路相關的應用。

核心模組包括

- 檔案系統I/O- 網路(HTTP、TCP、UDP、DNS、TLS/SSL等)- 二進位制資料流- 加密演算法- 資料流

等等。

Node模組的API形式簡單,降低了程式設計的複雜度。

使用框架可以加速開發。

常用的框架有Express.jsSocket.IOConnect等。

Node.js的程式可以在Microsoft Windows、Linux、Unix、Mac OS X等伺服器上執行。

Node.js也可以使用

- **CoffeeScript**(一種旨在簡化JavaScript的替代語言,其程式碼可按照一定規則轉化為合法的JavaScript程式碼)- **TypeScript**(微軟開發的強化了資料型別的JavaScript變體)- **Dart語言**- 以及其他能夠編譯成JavaScript的語言程式設計

Node.js主要用於編寫像Web伺服器一樣的網路應用,這和PHP和Python是類似的。

但是

Node.js與其他語言最大的不同之處在於,

PHP等語言是阻塞的(只有前一條命令執行完畢才會執行後面的命令),

而Node.js是非阻塞的(多條命令可以同時被執行,透過回撥函式得知命令已結束執行)。

Node.js是事件驅動的。開發者可以在不使用執行緒的情況下、開發出一個能夠承載高併發的伺服器。其他伺服器端語言難以開發高併發應用,而且即使開發出來,效能也不盡如人意。Node.js正是在這個前提下被創造出來。Node.js把JavaScript的易學易用和Unix網路程式設計的強大結合到了一起。Node.js使用Google V8 JavaScript引擎,因為:V8是基於BSD許可證的開源軟體V8速度非常快V8專注於網路功能,在HTTP、DNS、TCP等方面更加成熟Node.js已經有數十萬模組,它們可以透過一個名為npm的管理器免費下載。Node.js開發社群主要有兩個郵件列表一個在freenode的名為#node.js的IRC頻道。社群集中在NodeConf 頁面存檔備份,存於網際網路檔案館。2 - 歷史

Node.js於2009年寫成,原始作者是Ryan Dahl

“Ryan Dahl”的圖片搜尋結果

Node.js結合了Google的V8、事件驅動模式和低階I/O介面,

其設計靈感源自Flickr的一款上傳進度欄

在上傳過程中,瀏覽器並不清楚有多少檔案已經發送到伺服器,除非向伺服器進行查詢,於是達爾想出了一個更簡便的方法。

Node.js的開發和維護工作由達爾本人主持,而他所在的Joyent公司也提供了贊助。

2009年2009年11月8日,達爾在歐洲JSConf大會上展示了Node.js專案,並受到了觀眾讚賞。在演講中,達爾針對Apache HTTP Server順序程式設計方式提出了批評,認為Apache處理大量併發連線(10,000甚至更多)的可能性有限,而且順序程式設計方式在多連線情況下會造成阻塞,或者消耗更多資源;而Node.js提供了基於事件驅動和非阻塞的介面,可用於編寫高併發狀態下的程式,而且JavaScript的匿名函式、閉包、回撥函式等特性就是為事件驅動而設計的。2010年2010年1月,一款名為“npm”的軟體包管理系統誕生。npm使程式設計師能夠更方便地釋出和分享Node.js類庫原始碼,而且簡化了類庫安裝、升級與解除安裝的過程。Node.js最初只支援Linux和Mac OS X作業系統。2011年2011年6月,微軟和Joyent共同合作,把Node.js移植到了Windows系統上面,並且在7月釋出了第一個正式支援Windows系統的版本。2012年2012年1月,達爾離開了Node.js專案,開發工作由他的同事以及npm創始人艾薩克·施呂特(Isaac Schlueter)繼續主持。2014年2014年2月,蒂莫西·費里斯(Timothy J. Fontaine)接任專案主管。由於長期對Joyent的管理感到不滿,Node.js核心開發者Fedor Indutny在2014年12月製作了分支版本,並起名“io.js”。“Fedor Indutny nodejs”的圖片搜尋結果與Node.js相對的是,io.js採用開放管理模式進行管理,並計劃始終採用最新版的V8引擎。2015年為了在使用者、廠商和開發者之間獲取平衡,Node.js基金會於2015年初成立。基金會得到了IBM、Intel、微軟、Joyent等公司的支援。6月,Node.js和io.js開發者社群共同決定合併到Node.js基金會之下。同年9月,Node 4.0釋出,Node.js和io.js正式合併。4.0版引入了ES6的語言特性和“長期支援版本”的釋出週期。2016年到了2016年,io.js宣佈不再發布新版本,並建議開發者換回Node.js。3 - 技術3.1 - 執行緒Node.js以單執行緒執行,使用非阻塞I/O呼叫,這樣既可以支援數以萬計的併發連線,又不會因多執行緒本身的特點而帶來麻煩。眾多請求只使用單執行緒的設計意味著<u>可以用於建立高併發應用程式</u>。Node.js應用程式的設計目標是任何需要操作I/O的函式都使用回撥函式。這種設計的缺點是,如果不使用cluster、StrongLoop Process Manager、pm2等模組,Node.js就難以處理多核或多執行緒等情況。3.2 - V8V8是為Google Chrome設計的JavaScript執行引擎,Google於2008年將其開源。V8用C++寫成,它將JavaScript原始碼編譯成本地機器碼而不是解釋執行。Node.js用libuv來處理非同步事件,而V8提供了JavaScript的實時執行環境。libuv是一個網路和檔案系統功能的抽象層,既可以用於Windows又可以用於符合POSIX標準的系統,例如Linux、OS X和Unix。Node.js的核心功能被包含進一個JavaScript庫,並透過C++將各部分與作業系統進行聯絡。3.3 - npmnpm是Node.js附帶的包管理器。npm是一個命令列工具,用於從NPM Registry中下載、安裝Node.js程式,同時解決依賴問題。npm提高了開發的速度,因為它能夠負責第三方Node.js程式的安裝與管理。3.4 - 統一APINode.js將瀏覽器、資料(例如MongoDBCouchDB)等組合到一起,透過JSON提供一個統一的介面。由於前端框架和一些基本的後端開發技術(如MVC、MVP、MVVM等)變得流行,Node.js也支援客戶端和伺服器端重新利用相同的模型和介面3.5 - 事件迴圈
- Node.js將其註冊到作業系統中,這樣可以及時注意到新連線的產生。- 當新連線產生時,作業系統會產生一個回撥。- 在Node.js執行時內部,每個連線都被分配一個小型的**堆**。- 與其他伺服器程式不同的是,Node.js不使用程序或執行緒處理連線,而是採用事件迴圈來處理併發連線。- 而且Node.js的事件迴圈不需要手動呼叫。- 在回撥函式定義之後,伺服器進入事件迴圈。- 當回撥函式均被執行完畢之後,Node.js結束事件迴圈。
4 - 開發工具4.1 - 桌面IDEAtom(免費、開源軟體)Brackets(免費、開源軟體)Sublime Text(商業軟體)JetBrains IntelliJ IDEA(商業軟體)JetBrains WebStorm(商業軟體)Microsoft Visual Studio with Node.js Tools for Visual Studio(商業軟體)Microsoft Visual Studio with TypeScript(商業軟體)Nodeclipse Enide Studio(免費、開源軟體、在Eclipse基礎上開發)NoFlo –與GNOME API整合的流式開發環境Visual Studio Code(免費、開源軟體)4.2 - 線上編輯器
- Koding- Codenvy IDE- Cloud9 IDE- Codiad
4.3 - 執行時和偵錯程式
- Microsoft Visual Studio(商業)with Node.js Tools for Visual Studio(免費)- Microsoft WebMatrix(免費、閉源軟體)
Visual Studio Code4.4 - 框架伺服器端框架:Express.js, Socket.IO, Koa.js, Hapi.js, Total.jsMVC框架:Meteor, Derby, Sails, Mean, MeanJS, Tower.js, Nombo, Geddy, Compound, Yahoo! Mojito5 - 替代品JXcoreJXcore是一個開放原始碼的Node.js的分支,旨在支援移動裝置和物聯網。第一個Beta版本於2014年1月釋出。它於2015年2月13日開源並且可從GitHub repository獲得。JXcore同時使用Google V8和Mozilla SpiderMonkey兩個引擎。因此JXcore可以透過Mozilla SpiderMonkey在iOS裝置上執行Node應用程式。6 - 其他語言

類似的語言和開發環境有:

Python:Tornado和TwistedPerl:Perl Object EnvironmentC語言:libeventJava、JavaScript、Groovy、Python、Scala、Clojure、Ruby、Ceylon等:Vert.xJava和Scala:AkkaRuby:EventMachineD語言:vibe.dLua:LuvitOCaml:Ocsigen7 - 參見Rhino (JavaScript引擎)npm:廣泛使用的Node.js安裝包管理器MEANJSAN(JavaScript Archive Network),一個不太常用的JavaScript安裝包管理器

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Centos7環境Hbase叢集搭建