Node與傳統服務端技術棧差之間的區別?
Node.js于2009年首次發布,現在是由Node.js Foundation開發的開源社區項目。用于服務器端和網絡應用程序的開源,跨平臺JavaScript運行時環境。Node.js建立在Google V8 JavaScript引擎之上,這意味著Node.js應用程序是用JavaScript編寫的,并且使用與前端JavaScript應用程序類似的語法,包括對象,函數和方法。
Node.js的主要思想:面對跨分布式設備運行的數據密集型實時應用程序,使用非阻塞,事件驅動的I / O保持輕量級且高效。
Node.js帶有一個內置庫,該庫允許應用程序充當Web服務器。由于其事件驅動的體系結構和可優化應用程序吞吐量的非阻塞I / O API,Node.js在實時通信方面表現出色。以下是Node.js的優點:
輕巧且快速。易于配置且高度可定制。帶有npm 軟件包管理器,其中包含140.000+個免費提供的軟件包,并且可以很好地處理依賴項。消除了前端和后端開發人員之間存在的孤島,使開發過程更加有效。后端和前端團隊可以合并為一個單元。如果使用了以JSON(例如MongoDB或Cloudant)存儲對象的NoSQL DB,則它允許使用“從上到下”的JavaScript構建應用程序,甚至可以降至數據庫級別。這使開發甚至招聘變得更加容易。能夠以高吞吐量處理大量同時連接。因此,在構建快速且可擴展的網絡應用程序方面表現出色。允許代碼在應用程序的客戶端和服務器端之間重用。盡管最初設計Node.js時沒有線程,但仍然可以利用多個內核并使用ChildProcess API生成子進程。Node真正的亮點在于構建快速,可擴展的網絡應用程序,因為它能夠以高吞吐量處理大量并發連接,這相當于高可擴展性。
Node.js有一個缺點–它不是為繁重的計算而設計的,因為任何CPU密集型操作都會廢除所有吞吐量,并且在線程忙于處理數字時會阻止任何傳入的請求。
Node.js和傳統服務器之間的請求處理比較
Java作為后端編程語言的優勢非常多。
平臺獨立性
Java以其“一次編寫,隨處運行”的方法而聞名并廣受喜愛,這意味著用Java編寫的代碼可以在任何平臺上運行,而不管其最初創建于何處。這樣的平臺獨立性歸因于所謂的Java虛擬機-Java代碼執行的環境。
在JVM之前,所有軟件都是為特定的操作系統編寫的,而JVM通過使該軟件可以在安裝JVM的任何硬件或操作系統上運行而成為一項突破。JVM使Java源代碼可在任何平臺上讀取,而無需任何特殊的編譯器。在這方面,Java與其他需要編譯器的語言不同。
反過來,Node.js具有與操作系統綁定的模塊。當你需要軟件在另一個平臺上運行時,你將不得不重建模塊,以使其與新的OS兼容。
集成開發環境(IDE)Node.js和Java都有其IDE,但是Java更好。Java開發人員的首選工具是Eclipse,IntelliJ IDEA和NetBeans,它們帶有集成的調試器,服務器和反編譯器。
每個Java IDE是一個完整的生態系統,支持后端代碼創建的所有階段。在每個IDE中,你可以輕松地編寫代碼,對其進行編輯和調試,構建軟件然后進行測試。
Node.js開發人員通常僅使用純文本編輯器和命令行來編寫其代碼。有些人更喜歡支持Node.js和JavaScript的Visual Studio Code。當然,市場上也有性能良好的Node.js IDE,例如,具有智能編碼輔助和錯誤檢查功能的WebStorm,Eclipse Che和具有完整配置的調試器模塊的特殊Node.js堆棧。 但是,大多數開發人員都認為,與Node.js開發中使用的Java IDE相比,Java IDE更加精簡。
庫在過去的二十多年中,Java積累了大量包含可重用代碼組件的庫。庫是節省大量Java社區知識的省時工具。
大多數Java庫都是開源的,并由經驗豐富的Java開發人員支持和更新。Java庫的集合涵蓋了所有編程方面–有通用庫(例如Apache Commons),XML解析庫(例如JAXB),單元測試庫(例如JUnit)以及數千種庫。
Node.js具有可被視為JavaScript庫的模塊。一些模塊是內置的,例如用于解析URL字符串的 url 模塊, 提供加密功能的crypto 模塊, 支持HTTP協議功能的http 模塊, 允許與文件系統交互的fs 模塊, 用于處理文件的path 模塊。和目錄路徑,而其他路徑則可用作第三方組件。模塊化結構是Node.js的強項之一,它使用戶可以節省時間并易于修改和擴展。盡管如此,Java庫的質量仍然被認為更高。
多線程處理
Java使用多線程Web服務器,該服務器在單獨的線程中處理每個請求。多線程允許在不排隊事件的情況下同時執行多個任務。
多線程處理使Java成為CPU密集型應用程序(例如視頻流,圖像編輯等)的絕佳工具。使用Java集成了多線程,而其他語言則需要針對每個操作系統的附加過程來啟用多線程請求處理。
Node.js是單線程的,其中所有請求都在單個線程中處理。這些事件被放置在隊列中,一個接一個地處理。單線程方法在某種程度上減慢了Node.js應用程序的性能,并使之成為處理CPU繁重的大型產品的次佳選擇。
同時,我們應該注意,Node.js正在實現 多線程模式。但是,稱為“工作線程”的解決方案實際上并不會創建真正的多線程進程。仍然有帶有新進程的單線程可以共享內存和交換消息。
輔助線程是CPU密集型任務的解決方案。這可能是Node.js缺乏的唯一主要領域。當前,還沒有一個穩定的版本。因此,我們不能說這項倡議是否成功。無論如何,都值得遵循。