Nodejs——前言、Nodejs簡介

前言

這是一套系統性非常強,邏輯緊密,由淺入深,詳略得當,風趣幽默的Nodejs學習筆記。但既然是筆記,就必然沒有辦法做到面面俱到。事實上,我只關心基礎、難於理解和容易出錯的部分。如果你有一定的前端基礎,並對Nodejs有十足的熱情,那麼這份資料非常適合你。
但實話實說,這份資料也許不適合那些初出毛犢的前端工程師們,雖然我已經盡我所能把涉及到的每個知識點講解到最詳細。

在遇到問題時,我總是喜歡強迫自己由一個問題舉一反三,直到解決與此相關的所有問題爲止。所以這份資料非常詳細,詳細到我在編寫時覺得生無可戀,因爲總有無數的問題需要解決。

這套資料分爲基礎知識和實戰兩部分,在基礎知識部分,我們把更多的注意力放在基礎理論的學習上;而在實戰部分,我們則以案例代碼驅動爲主。這份資料具有很強的系統性,其中的課題邏輯也都是非常嚴密的。因此我推薦你順序閱讀這份資料,依次把份資料中所提供的代碼付諸實踐。

約定

(1)重點部分或值得注意的部分會加粗表示

(2)章節引子或前言

章節引子、前言或者背景會用引用字體表示

(3)代碼表示

代碼會放在代碼塊裏

或者以行內代碼的形式出現

(4)小故事、比喻或書名會以斜體字表示

(5) 代碼註釋中=>符號後面的內容表示輸出的結果

第一章 Nodejs簡介

Nodejs是一個爲實時web應用開發而誕生的平臺。它在誕生之初就充分考慮了在實時響應,超大規模數據要求下架構的可擴展性。這使它摒棄傳統平臺依靠多線程來實現併發的設計思路,而採用單線程、異步式IO、事件驅動式的設計模型。這些特性不僅帶來了巨大的性能提升,還減少了多線程程序設計的複雜性,進而提高了開發效率。

Nodejs最初是2009年由Ryan Dahl發起的開源項目,現在由Joyent公司管理並維護。Nodejs有着強大而靈活的包管理器(node package manager,npm),目前已經有上萬個第三方模塊,其中,有像express這樣的網站開發框架,mysql、mongodb數據庫的接口,有模板語言解析、CSS生成工具、郵件、加密、圖形、調試支持,甚至還有圖形用戶界面和操作系統API工具。

1.1 Nodejs是什麼?

Nodejs並非一種獨立的語言,也不是JS框架或瀏覽器端的庫,Nodejs是一個讓JS運行在服務器端的開發平臺。與PHP、Python相比,它跳過了Apache、Nginx等HTTP服務器,直接面向前端開發。

Nodejs是一個讓JS運行在瀏覽器之外的平臺。它實現了諸如文件系統、模塊、包、操作系統API網絡通信等在瀏覽器中JS望塵莫及的功能。

Nodejs遵循CommonJS規範,它採用目前世界上最快的JS引擎——Google Chrome V8。Nodejs不運行在瀏覽器上,也就不存在所謂的瀏覽器兼容,你可以方心的使用JS語言的所有特性。

1.2 Nodejs能做什麼?

Nodejs爲網絡而生,但它能做的遠不止開發一個網站那麼簡單,使用Nodejs,你可以輕鬆開發:

  1. 具有複雜邏輯的網站
  2. 基於社交網絡的大規模web應用
  3. web socket服務器
  4. TCP/UDP套接字應用程序
  5. 命令行工具
  6. 交互式終端程序
  7. 帶有圖形界面的本地應用程序
  8. 單元測試工具
  9. 客戶端JS編譯器

Nodejs內建了HTTP服務器支持,也就是說你可以輕而易舉的實現一個網站和服務器的組合。Nodejs還可以部署到非網絡應用的環境下,比如一個命令行工具。

1.3Nodejs的最大特點—— 異步式IO與事件驅動

Nodejs的最大特點就是採用異步式IO與事件驅動的架構模式設計。對於高併發的解決方案,傳統的架構是多線程模型,也就是爲每個業務邏輯提供一個系統線程,通過系統線程切換來彌補同步式IO調用時的時間開銷。Nodejs使用的是單線程模式,對於所有的IO採取異步式的請求方式,避免了頻繁的上下文切換。Nodejs在執行過程中會維護一個事件隊列,程序在執行時進入事件循環等待下一個事件到來,每個異步式IO請求完成後會被推送到事件隊列,等待程序進程進行處理。我們會在後面的章節對異步式IO和事件驅動機制進行詳細的說明。

1.4 Nodejs的性能

1.4.1 Nodejs架構

1.4.2 Nodejs對比PHP+Nginx

在3000併發連接,30秒的測試下,輸出“hello world”請求以及對MYSQL進行查詢操作請求,結果顯示
Nodejs性能要明顯優於PHP+Nginx。

單純就JS而說,它已經成爲了當今社會最快的腳本語言之一。

1.5 CommonJS

1.5.1 服務器端JS的重生

最初,真正使大多數人看到服務器端JS威力的是微軟的ASP。但隨着Web2.0時代的到來,ajax等概念被提出,JS成爲了前端開發的代名詞,同時服務器端的JS也逐漸被人們遺忘。直至近幾年,JS又具有了在服務器端流行的條件,Nodejs應允而生。Mongodb等新型非關係型數據庫也開始使用JS和Json作爲其操作語言,基於JS的服務器端實現開始遍地開花。

1.5.2 CommonJS的規範與實現

爲了統一JS在瀏覽器之外的實現標準,CommonJS誕生了。它是一種服務器端JS的規範。CommonJS不參與標準庫的實現,其實現交給Nodejs之類的項目來完成。CommonJS規範包括了模塊(modules),包(packages),系統(system),二進制(binary),系統文件,控制檯,編碼,套接字,單元測試等部分。

Nodejs是目前CommonJS最熱門的一個實現,但它並不完全遵循CommonJS的規範,因爲規範的指定總是滯後於技術的發展。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章