NodeJS 對於 Java 開發者而言是什麼?

2016-12-27    分類:WEB開發、程式設計開發、首頁精華0人評論發表於2016-12-27

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

我們都知道Node.js現在得到了所有的關注。每個人都對學習Node.js感興趣,並希望可以工作於Node.js。在開始工作之前瞭解技術背後的概念總是不會錯的。但對初學者來說,可能會因為不同的人使用的不同定義而暈頭轉向。Node.js究竟是什麼?它是新的語言還是新的框架,是新的工具抑或只是一個簡單的JavaScript檔案?即使對於有經驗的Java開發人員來說,也很難快速瞭解Node.js。因此,在本文中,我將嘗試為Java開發人員詮釋Node.js。

執行時環境

我們知道Java需要一個稱為JRE的執行時環境來執行Java程式。JRE有一個稱為Java Virtual Machine(JVM)的虛擬機器。JVM有許多元件,如垃圾回收器(GC),即時(JIT)編譯器,直譯器,類裝載器,執行緒管理器,異常處理器,用於在不同時間執行不同的任務。

除了JVM之外,JRE還有一系列的庫(例如,rt.jar)來幫助執行時的Java程式。我們有單獨的JRE用於不同的平臺,如Windows,Macintosh和Linux,以及還有JVM。

好吧,就試著記住如何編譯和執行一個Java程式。我們有原始碼(.java),它由Java編譯器編譯成一個名為Bytecode(.class)的中間程式碼。此Bytecode被提供給JVM以便在給定的目標平臺上執行。JVM在執行之前將Bytecode轉換為特定於目標平臺的機器碼。

Java程式的執行可以通過下面的圖片解釋:

Web應用程式架構

典型的Java Web應用程式架構有四個層:客戶層(Client),展示層(Presentation),服務/業務層(Service/Business)和資料層(Data)。

客戶層(Client layer)可以使用像jQuery這樣的庫來支援AJAX功能並且具有一些客戶端驗證和DOM操作。

展示層(Presentation layer)通常是與客戶層互動的一個層。該層通常已經實現了用於請求和響應處理的MVC模式。在這一層可以使用如Spring MVC這樣的框架。此外,還有一個模板引擎,如Velocity,可以根據預定義的佈局動態地渲染檢視。

服務或業務層(Service/Business layer)負責具備業務邏輯並與其他層通訊。在AJAX請求的情況下,該層直接向客戶層提供資料。此層執行業務邏輯並回應到展示層以更新模型。服務層是與資料層通訊以獲取或更新所需資料的一個層。服務層可以具有使用任何框架,例如Spring的SOAP或REST服務實現。

資料層(Data layer)通常使用一些ORM框架,如Hiberate,或任何基於JDBC的庫/模板(Spring JDBC模板)來與任意RDBMS(如Oracle)進行通訊。

架構部署

Java Web應用程式架構部署包括Apache HTTP伺服器,它充當代理伺服器以及提供靜態內容。動態內容由Web容器提供,Web容器實際上是處理Java檔案的引擎。

下圖說明了Java Web應用程式的架構部署:

我如何理解Node.js?

執行時環境

我們上面討論JRE的原因是為了直接與Node.js進行比較。對,你看明白了吧! Node.js不是一種語言;不是框架;也不是工具。它是用於執行基於JavaScript應用程式的執行時環境。

與JRE類似,Node.js有一個稱為JavaScript Virtual Machine(JsVM?)的虛擬機器。它為基於JavaScript的應用程式生成機器程式碼,以便在不同的平臺上啟用它。

Node.js還有一系列庫,它們可能被稱為Node API或Node Modules,用於幫助在執行時執行JavaScript應用程式,類似於JRE中的Java庫。我們對不同的平臺,如Windows,Macintosh和Linux,以及JsVM有不同的Node.js要求。

JavaScript Virtual Machine就是V8,來自Google的開源JavaScript引擎。與Java Virtual Machine一樣,JsVM(V8引擎)也有主要元件,如JIT和GC,分別用於執行任務,執行時編譯,和記憶體管理。

現在,讓我們試試理解JavaScript程式是如何編譯和執行的。原始碼是用JavaScript(.js)編寫的。在將其提供給JsVM(V8引擎)之前,沒有生成中間程式碼。JsVM直接獲取此原始碼並將其編譯為特定於給定目標平臺的機器程式碼以便執行。

下面的圖片可以簡明地說明上述解釋:

Web應用程式架構

基於Node.js的Web應用程式主要遵循Java Web應用程式架構。主要區別在於客戶端請求處理。客戶端請求將由單個執行緒處理,但在Node.js應用程式的情況下將非同步處理。使用Java,每個客戶端請求將由單獨的執行緒同步處理,因此它是多執行緒的。

有許多框架/庫可用於基於Node.js的Web應用程式開發。這裡有趣的地方在於,所有的框架/庫都是基於JavaScript的。

你可以從下面的圖片中快速理解不同的層和在那些Node.js應用程式層中使用的框架/庫。

客戶層使用Angular.js,客戶端MVC框架。展示層,以及服務層,可以通過使用Express.js,一個基於JavaScript的Web應用程式框架來開發。這也自帶一個用於執行Node.js應用程式的獨立伺服器。資料層使用物件資料建模模組(例如Mongoose.js)來與NoSQL資料庫(如MongoDB)通訊。

這個特殊的棧稱為MEAN,它由MongoDB,Express.js,Angular.js,客戶端MVC框架和Node.js(執行時環境)組成。

架構部署

基於Node.js的Web應用程式的架構部署遵循Java的Web應用程式部署架構。它有一個NGINX伺服器,它的作用就如同HTTP代理伺服器,並提供靜態內容。動態內容由Node.js伺服器提供,該伺服器包含處理JavaScript檔案的引擎。

下面的圖解釋了基於Node.js的Web應用程式的架構部署:

就這樣?

請注意,這篇文章的目的只是為了幫助從Java開發人員的角度理解Node.js,而不是為了顯擺對Java或Node.js的支援。此外,除了我們在討論中涉及到的之外,還有許多不同的架構解決方案、框架和工具。為了便於比較和理解,我採用了最簡單和可行的架構解決方案以及最簡單的框架和庫系列。因此,請務必更進一步地去深入瞭解。祝大家學習愉快!

譯文連結:http://www.codeceo.com/article/what-nodejs-for-java-developer.html
英文原文:What Is Node.js for Java Developers?
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章