Node.js對於Java開發者而言是什麼?
來自:碼農網
英文原文:https://dzone.com/articles/what-is-nodejs-for-java-developers
翻譯作者:碼農網 – 小峰
我們都知道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的支持。此外,除了我們在討論中涉及到的之外,還有許多不同的架構解決方案、框架和工具。為了便於比較和理解,我採用了最簡單和可行的架構解決方案以及最簡單的框架和庫系列。因此,請務必更進一步地去深入了解。祝大家學習愉快!
本文編號2290,以後想閱讀這篇文章直接輸入2290即可。
輸入m可以獲取到文章目錄
本文內容的相關公眾號推薦
Java編程
安卓開發
更多推薦《15個技術類公眾微信》
涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。
※StackOverflow 2017開發者調查報告!
※IntelliJ IDEA 2017.1正式發布
※為什麼成為一名程序員這麼困難?——從程序新手到准工程師的必經之路
※硬碟寫到一半時斷電,文件系統里會發生什麼?
TAG:程序猿 |
※web開發者的最愛—Node.js
※Node—require.cache對象介紹
※用 Node.js 把玩一番 Alfred Workflow
※為什麼我從 Python 轉戰到 Node.js?
※Node—_filename與 dirname變數
※Node.js創造者,Ryan Dahl專訪
※如何評價Facebook推出的node模塊管理器yarnpkg?
※Node.js 路由
※在Node中使用RabbitMQ和Redis
※淺析Node與Element
※Node.js簡介
※基於Node.js + Express + mongoDB + Bootstrap 搭建的電影網站
※如何使用pm2和Nginx部署Node.js應用
※使用 Node.js 進行 HTTP/2 Server Push
※node.js入門系列(一)——Node.js簡介
※爬蟲還在用Python?我與Node.js不得不說的故事
※node調用phantomjs-node爬取複雜頁面
※Node在shell中執行命令
※Hadoop 之 NameNode 元數據原理